从Retrofit响应转换String的ArrayList

时间:2017-03-20 15:42:42

标签: android json arraylist retrofit2

我想将此json响应["tunisie","canada"]转换为List,以便能够在Spinner中使用它。 这是我的改装电话:

   List<String> list = new ArrayList<String>();
   public void populatePays(){
   pays = (Spinner) findViewById(R.id.pays_spinner);
   pays.setOnItemSelectedListener(this);
   apiService = RestService.createService(SolarAPIService.class);
   Call<ArrayList<String>> call = apiService.listPays();
   call.enqueue(new Callback<ArrayList<String>>() {
       @Override
       public void onResponse(Call<ArrayList<String>> call, Response<ArrayList<String>> response) {
          list.addAll(response.body());

       }

       @Override
       public void onFailure(Call<ArrayList<String>> call, Throwable t) {

       }
   });
   ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>
           (this, R.layout.spinner_item, list);
   dataAdapter.setDropDownViewResource
           (R.layout.spinner_drop_down_item);
   pays.setAdapter(dataAdapter);

  }

执行后我最终得到一个空的Spinner。因此,我的回答没有转换为我的ArrayList<String>

2 个答案:

答案 0 :(得分:1)

在主线程上发生了对适配器的设置值,但是api调用响应正在通过另一个线程,你应该调用

dataAdapter.notifyDataSetChanged();

之后

list.addAll(response.body());

答案 1 :(得分:0)

输入以下代码:

 ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>
           (this, R.layout.spinner_item, list);
   dataAdapter.setDropDownViewResource
           (R.layout.spinner_drop_down_item);
   pays.setAdapter(dataAdapter);

内部:

       @Override
       public void onResponse(Call<ArrayList<String>> call, Response<ArrayList<String>> response) {
          list.addAll(response.body());
          // HERE
       }