1
我是ANdroid的新手,这是我对Retrofit的第一次测试。我使用Retofit调用API,如下所示。 我的问题是我运行应用程序时出现空白屏幕。我想在列表中显示音频文件,然后播放选定的音频。我的API是这样的:使用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();
}
});
}`
为什么我没有得到的音频文件的URL。还有其他方法吗? –
要使其正常工作,您需要: –
对于您的类AudioReturn和Data:默认构造函数以及每个字段的getters和setter。 –