2017-07-30 3 views
1

私のアプリケーションでは、サーバーからSpinnerにデータをいくつか表示したいと思っています。androidのSpinnerにデータを追加する方法

final SerialDetailSendData sendData = new SerialDetailSendData(); 
sendData.setSeriesID(serialID); 

InterfaceApi api = ApiClient.getClient().create(InterfaceApi.class); 
Call<SeriesDetailResponse> call = api.getSeriesDetail(sendData); 

call.enqueue(new Callback<SeriesDetailResponse>() { 
    @Override 
    public void onResponse(Call<SeriesDetailResponse> call, Response<SeriesDetailResponse> response) { 
     if (response.body().getData() != null) { 
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.layout.spinner_hint_item, 
        ???); 
      adapter.setDropDownViewResource(R.layout.spinner_dropdown_item); 
      SerialReview_CastSpinner.setAdapter(adapter); 

      SerialReview_CastProgress.hide(); 
     } 
    } 

    @Override 
    public void onFailure(Call<SeriesDetailResponse> call, Throwable t) { 
    } 
}); 

しかし、私は「ドン:私はRetrofitライブラリを使用してコードの下にを書くサーバーに接続

"stars": [ 
     { 
     "id": 105076, 
     "name": "Eleanor Tomlinson", 
     "character": null, 
     "imageUrl": "http://example.com/cpanel/uploads/Celebrities/105076/thumb2-SK4MPEGW09.jpg", 
     "userReview": "" 
     }, 
     { 
     "id": 10127, 
     "name": "Aidan Turner", 
     "character": null, 
     "imageUrl": "http://example.com/cpanel/uploads/Celebrities/10127/thumb2-KL9G4TNGW2.jpg", 
     "userReview": "" 
     }, 
     { 
     "id": 21340, 
     "name": "Gabriella Wilde", 
     "character": null, 
     "imageUrl": "http://example.com/cpanel/uploads/Celebrities/21340/thumb2-UD5HJ2EICN.jpg", 
     "userReview": "" 
     } 
    ] 

の場合:https://github.com/ganfra/MaterialSpinner
マイJSON:スピナーのために
私はこのライブラリを使用しますスターナークラスの名前をSpinnerのArrayAdapterに追加するにはどうすればいいですか?

  ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.layout.spinner_hint_item, 
        ???); 
+0

でそのループを短くすることができますが、 'ArrayAdapter '作らないのはなぜ? https://guides.codepath.com/android/Using-an-ArrayAdapter-with-ListView –

答えて

0

最初に、APIからデータを取得するArrayListを作成します。

ArrayList<String> arrayList = new ArrayList<String>(); 

arrayList.add("Item1"); 
arrayList.add("Item2"); 
arrayList.add("Item3"); 

データのArrayAdapterを作成します。

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String> (this,android.R.layout.simple_spinner_dropdown_item, arrayList); 
spinner.setAdapter(arrayAdapter); 
+0

あなたはpojoクラスの権利を持っています。 'arrayList.add()。response.getData()。getItem ...'このようなものです。 –

+0

@Kirフルコード?あなたはアダプタにデータを追加するために改良する必要はありません –

+0

@Kirこれに従ってください:https://stackoverflow.com/questions/33936573/dynamically-populating-spinner-using-retrofit。私はこれが確かにあなたを助けると思う。 –

-1

このコードを試してみてください。

final SerialDetailSendData sendData = new SerialDetailSendData(); 
    sendData.setSeriesID(serialID); 

    InterfaceApi api = ApiClient.getClient().create(InterfaceApi.class); 
    Call<SeriesDetailResponse> call = api.getSeriesDetail(sendData); 

    call.enqueue(new Callback<SeriesDetailResponse>() { 
     @Override 
     public void onResponse(Call<SeriesDetailResponse> call, Response<SeriesDetailResponse> response) { 
      if (response.body().getData() != null) { 
       ArrayList<String> arrayList = new ArrayList<String>(); 
       for (int i = 0; i < response.body().getData().getStars().size(); i++) { 
        arrayList.add(response.body().getData().getStars().get(i).getName()); 
       } 
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.layout.spinner_hint_item, arrayList); 
       adapter.setDropDownViewResource(R.layout.spinner_dropdown_item); 
       SerialReview_CastSpinner.setAdapter(adapter); 

       SerialReview_CastProgress.hide(); 
      } 
     } 

     @Override 
     public void onFailure(Call<SeriesDetailResponse> call, Throwable t) { 
     } 
    }); 
+0

'response.body()'を複数回呼び出すことはできません –

+0

@ cricket_007、なぜ私の友人ですか? 1つのコール応答.body()はサイズを取得し、2回はスターの名前を取得します。 –

+0

OkHTTPおよび改訂のドキュメントによれば、エラーが発生します。 –

0

あなただけでは、オブジェクトの作成にあまり効率的であるように、1つを作成し、コールバックでアダプタにはない追加する必要があります。

final ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_dropdown_item); 
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item); 
spinner.setAdapter(adapter); 

call.enqueue(new Callback<SeriesDetailResponse>() { 
    @Override 
    public void onResponse(Call<SeriesDetailResponse> call, Response<SeriesDetailResponse> response) { 
     SeriesDetailResponse body = response.body(); 
     List<Star> stars = body.getStars(); 

     adapter.clear(); 
     for (Star star : stars) { 
      adapter.add(star.toString()); 
     } 

     progress.hide(); 
    } 

あなたはArrayAdapter<String>List<String>を持っていたかArrayAdapter<Star>を使用した場合、あなたはadapter.addAll()

関連する問題