2016-12-11 9 views
1

私はANdroidの新機能であり、これはRetrofitの最初のテストです。以下のようにRetofitを使用してAPIを呼び出しています。 私の問題は、アプリケーションを実行すると空白の画面が表示されます。リストにオーディオファイルを表示してから、選択したオーディオを再生したいとします。私のAPIは次のようになります。enter image description hereRetrofitを使用してAPIを呼び出す

私は、このAPI .Thisを呼び出すためにレトロフィットを使用しています私は `

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(); 

} 

を使用しています何RestclientとRestInterfaceで使用アダプタは、この`

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; 
} 

結果は空白です。私はActivityから呼び出しています:あなたのJSONで

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

トラックのリストがdataと呼ばれています。 しかし、あなたのクラスAudioReturnでは、それをdataListと呼びます。それをdataに変更すればうまくいくはずです。

編集

して、データのクラスを置き換えます。私は、オーディオファイルのURLを取得していない午前なぜ

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

:によって

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クラス。他の方法はありますか? –

+0

正常に動作させるには、次のものが必要です。 –

+0

あなたのクラスのAudioReturnとData:デフォルトのコンストラクタと各フィールドのgetterとsetter。 –

関連する問題