gpt4 book ai didi

java - 使用response.body中的对象填充ArrayList

转载 作者:行者123 更新时间:2023-12-02 01:39:52 26 4
gpt4 key购买 nike

我正在使用 Retrofit 从 api 获取数据列表。我想将 body.response 中获得的数据保存到 arrayList 中。我可以做到这一点,并从新的 arrayList 中获取项目,但似乎新列表未保存。当我尝试在 onResponse 方法之外使用它时,出现错误

Unable to start activity... IndexOutOfBoundsException: Index 0, Size 0

界面

 public interface ServerApi {
@Headers("Accept: application/json")
@GET("cities")
Call<ArrayList<City>> getCities();
}

Activity

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()); 效果很好。但是当我把它写出方法时,应用程序失败了

最佳答案

可以看出,您在后台线程中运行代码,下面的几行尝试在 UI 线程上更新 TextView 。
后台操作将需要一些时间,因此,当您尝试更新 TextView 时,cityList 为空。
考虑在这里多读一点:Consuming apis with retrofit

关于java - 使用response.body中的对象填充ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54592601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com