我想将此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>
答案 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
}