在我的应用程序中,会立即对整个列表执行查询,我怎样才能让它们像在链中一样运行?首先对第一个元素执行,完成后开始对第二个元素执行。
private void loadJSON() {
Call<List<Integer>> call = request.getTopStories();
call.enqueue(new Callback<List<Integer>>() {
@Override
public void onResponse(Call<List<Integer>> call, Response<List<Integer>> response) {
topStories = response.body();
loadDetails();
}
@Override
public void onFailure(Call<List<Integer>> call, Throwable t) {
Toast.makeText(MainActivity.this, R.string.error, Toast.LENGTH_LONG).show();
}
});
}
private void loadDetails(){
for (Integer id : topStories) {
request.getTopStore(id).enqueue(new Callback<Model>() {
@Override
public void onResponse(Call<Model> call, Response<Model> response) {
models.add(response.body());
topStoriesAdapter.notifyDataSetChanged();
}
@Override
public void onFailure(Call<Model> call, Throwable t) {
Toast.makeText(MainActivity.this, R.string.error, Toast.LENGTH_LONG).show();
}
});
}
}
这是使用递归的建议:
在这些方法所在的类中添加一个字段:
在调用方法之前
loadJSON(),初始化字段mLoadPosition:并更改方法
loadDetails():或者你可以使用同步请求,但是你必须在 UI 线程之外的线程上手动实现请求的执行。