我正在处理以下api调用https://pokeapi.co/api/v2/pokemon/,问题是它似乎很慢并且每个条目本身都有几个端点。是否可以在进行ListView
调用时异步更新api
?我觉得它可能类似于使用端点的下一个和上一个键以及触发listener
事件来更新Listview
或AsyncTask's doInBackground
方法中的onProgressUpdate
。我感谢任何帮助,我觉得我有一个想法的开始,但我需要帮助完成这个想法。
答案 0 :(得分:1)
你绝对可以通过AsyncTask实现它,但我宁愿建议使用RxJava的解决方案。
您可以实施 RxJava Chaining 。
共享代码片段,了解如何使用RxJava进行链接调用。
private void fetchHackerNewsStoriesChaining() {
StoriesApiInterface storiesApiInterface = HackerNewsApiClient.getStoriesApiInterface();
storiesApiInterface.getTopStories()
.flatMapIterable(new Function<JsonArray, Iterable<?>>() {
@Override
public Iterable<?> apply(JsonArray jsonArray) throws Exception {
Log.d("Count", ""+jsonArray.size());
return jsonArray;
}
})
.flatMap(new Function<Object, ObservableSource<SingleStoryModelResponse>>() {
@Override
public ObservableSource<SingleStoryModelResponse> apply(Object newsId) throws Exception {
return HackerNewsApiClient.getStoryDetailsApiInterface().getNewsStoryDetail(((JsonElement) newsId).getAsLong())
.subscribeOn(Schedulers.io());
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<SingleStoryModelResponse>() {
@Override
public void onSubscribe(Disposable d) {
progressBar.setVisibility(View.VISIBLE);
}
@Override
public void onNext(SingleStoryModelResponse singleStoryModelResponse) {
adapterNewsList.addNewsItem(singleStoryModelResponse);
}
@Override
public void onError(Throwable e) {
Log.d("Hacker News", e.getMessage());
}
@Override
public void onComplete() {
progressBar.setVisibility(View.GONE);
}
});
}