我正在使用改造从api获取数据列表。我想保存我在body.response中获得的数据到arrayList。我可以这样做,并且可以从新的arrayList中获取项目,但是似乎新列表没有保存。当我尝试在方法onResponse之外使用它时,出现错误
无法开始活动... IndexOutOfBoundsException:索引0,大小0
界面
public interface ServerApi {
@Headers("Accept: application/json")
@GET("cities")
Call<ArrayList<City>> getCities();
}
活动
public class SomeActivity extends AppCompatActivity {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://url")
.addConverterFactory(GsonConverterFactory.create())
.build();
ServerApi serverApi = retrofit.create(ServerApi.class);
ArrayList<City> cityList = new ArrayList<City>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_parkings);
final TextView tv1 = findViewById(R.id.tv1);
final Call<ArrayList<City>> cities = serverApi.getCities();
cities.enqueue(new Callback<ArrayList<City>>() {
@Override
public void onResponse(Call<ArrayList<City>> call, Response<ArrayList<City>> response) {
for(int i=0; i<response.body().size(); i++){
City ct = new City(response.body().get(i).getId(), response.body().get(i).getName());
cityList.add(ct);
tv1.setText(cityList.get(i).getName());
}
}
@Override
public void onFailure(Call<ArrayList<City>> call, Throwable t) {
tv1.setText("failure " + t);
}
});
TextView c1 = findViewById(R.id.c1);
c1.setText(cityList.get(0).getName());
}
}
onResponse方法中的字符串tv1.setText(cityList.get(i).getName());
运行良好。但是当我用方法写出来的时候,乘法运算就失败了
答案 0 :(得分:2)
可以看出,您在后台线程中运行代码,而下面的几行尝试更新UI线程上的textview。
后台操作将花费一些时间,因此,当您尝试更新TextView时,cityList为空。
考虑在此处阅读更多内容:Consuming apis with retrofit