2016-12-11 3 views
1

Я новичок в ANDroid, и это мой первый тест Retrofit. Я использую Retofit для вызова API, который приведен ниже. Моя проблема: я получаю пустой экран при запуске приложения. Я хочу показать аудиофайлы в списке, а затем воспроизвести выбранный аудио. мой апи выглядит следующим образом: enter image description hereИспользование Retrofit для вызова API

Я использую Дооснащение назвать это Api .Это то, что Restclient и RestInterface я использую `

public class RestClient { 
private static RestInterface mInterface; 

public static RestInterface getClient() { 
    if (mInterface == null) { 

     OkHttpClient okClient = new OkHttpClient(); 
     okClient.interceptors().add(new Interceptor() { 
      @Override 
      public Response intercept(Chain chain) throws IOException { 
       Response response = chain.proceed(chain.request()); 
       return response; 
      } 
     }); 
     Retrofit client = new Retrofit.Builder() 
       .baseUrl(BASE_URL) 
       .addConverter(String.class, new ToStringConverter()) 
       .client(okClient) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 
     mInterface = client.create(RestInterface.class); 
    } 
    return mInterface; 
} 

public interface RestInterface { 
    @GET("/bins/15oqx") 
    Call<AudioReturn> audioReturn(); 

} 

адаптер используется, как это`

public class AudioAdapter extends 
RecyclerView.Adapter<AudioAdapter.AudioViewHolder> { 
Context mContext; 
private ArrayList<AudioReturn.data> mAudioReturn = new ArrayList<>(); 

public AudioAdapter(Context context, ArrayList<AudioReturn.data> list) { 
    mContext = context; 
    mAudioReturn = list; 
} 
@Override 
public int getItemCount() { 
    return mAudioReturn.size(); 
} 
@Override 
public void onBindViewHolder(AudioViewHolder holder, int position) { 
    AudioReturn.data current = mAudioReturn.get(position); 

    holder.track.setText(current.getTrack()); 
    holder.trackname.setText(mAudioReturn.get(position).getTrackname()); 
} 
@Override 
public AudioAdapter.AudioViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) { 
    View itemView = LayoutInflater. 
      from(viewGroup.getContext()). 
      inflate(R.layout.view_audio_files, viewGroup, false); 
    return new AudioAdapter.AudioViewHolder(itemView); 
} 
public void updateData(ArrayList<AudioReturn.data> datas) { 
    this.mAudioReturn = datas; 
    notifyDataSetChanged(); 
} 
public class AudioViewHolder extends RecyclerView.ViewHolder { 
    @Bind(R.id.view_audio_file_Track_Number) 
    TextView track; 
    @Bind(R.id.view_audio_file_Audio_Name) 
    TextView trackname; 
    public AudioViewHolder(View itemView) { 
     super(itemView); 
     ButterKnife.bind(this, itemView); 
    } 
} 

и Pojo является `public class AudioReturn { ArrayList dataList = new ArrayList <>();

public class data { 
    String track, trackname; 

    public data(String track, String trackname) { 
     this.track = track; 
     this.trackname = trackname; 
    } 

    public String getTrack() { 
     return track; 
    } 

    public String getTrackname() { 
     return trackname; 
    } 
} 
public AudioReturn(ArrayList<data> dataList) { 
    this.dataList = dataList; 
} 

    public ArrayList<data> getDataList() { 
    return dataList; 
} 

В результате я получаю пусто. Я звоню от деятельности:

AudioAdapter mAudioAdapter = new AudioAdapter(this, datas); 
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 
    mRecyclerView.setHasFixedSize(true); 
    mRecyclerView.setAdapter(mAudioAdapter); 

    RestClient.RestInterface restInterface = RestClient.getClient(); 

    Call<AudioReturn> audioReturnCall = restInterface.audioReturn(); 
    audioReturnCall.enqueue(new Callback<AudioReturn>() { 
     @Override 
     public void onResponse(Response<AudioReturn> response) { 
      datas = response.body().getDataList(); 
      mAudioAdapter.updateData(datas); 
      Toast.makeText(AudioActivity.this, "Success", Toast.LENGTH_SHORT).show(); 

     } 

     @Override 
     public void onFailure(Throwable t) { 
      Toast.makeText(AudioActivity.this, "Failure", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
}` 

ответ

0

В вашем JSON список треков называется data. Но в вашем классе AudioReturn вы называете это dataList, измените его на data, и он должен работать.

Редактировать

Заменить класс данных по:

public class Data { 
    // The fields names should be exactly equal to the one of the json 
    private String track; 
    private String trackName; 

    // Retrofit needs a default constructor 
    public Data() { 
    } 

    public Data(String track, String trackName) { 
     this.track = track; 
     this.trackName = trackName; 
    } 

    // Retrofit needs getters and setters for each field 
    public String getTrack() { 
     return track; 
    } 

    public void setTrack(String track) { 
     this.track = track; 
    } 

    public String getTrackName() { 
     return trackName; 
    } 

    public void setTrackName(String trackName) { 
     this.trackName = trackName; 
    } 
} 

И ваш класс AudioReturn по:

public class AudioReturn { 
    // The fields names should be exactly equal to the one of the json 
    private List<Data> data; 

    // Retrofit needs a default constructor 
    public AudioReturn() { 
    } 

    public AudioReturn(List<Data> data) { 
     this.data = data; 
    } 

    // Retrofit needs getters and setters for each field 
    public List<Data> getData() { 
     return data; 
    } 

    public void setData(List<Data> data) { 
     this.data = data; 
    } 
} 
+0

Почему я не получаю URL аудио файлов. Есть ли другие методы? –

+0

Для обеспечения правильной работы вам необходимо: –

+0

Для ваших классов AudioReturn и Data: конструктор по умолчанию, а также геттеры и сеттеры для каждого поля. –

 Смежные вопросы

  • Нет связанных вопросов^_^