【发布时间】:2020-03-03 06:22:21
【问题描述】:
我正在使用多个 api 调用从服务器获取数据,因为我正在使用 Retrofit@ 和 RxJava2。在我的 api 服务类中,我有 2 个 get 请求,它们都单独运行,因为数据没有完全到来。我想要同时从两个 api 获取所有数据。目前我正在获取类似这样的数据,我想要一些更好的方法来处理多个 api 调用。
下面是我的代码:
ApiService.class
public interface ApiService {
@GET("Categoery_api")
Observable<List<MenuModel>> getData();
@GET("Recent_six_post_api")
Observable<List<FlashStoryModel>> getFlashStory();
}
MainActivity.java
private void getMenu(){
Retrofit retrofit = RetrofitClient.getInstance();
ApiService myApi = retrofit.create(ApiService.class);
myApi.getData().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<MenuModel>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(List<MenuModel> menuModels) {
if(menuModels.size() > 0){
menuProg.setVisibility(View.INVISIBLE);
list.addAll(menuModels);
adapter = new MenuAdapter(list,getApplicationContext());
menuRecycler.setAdapter(adapter);
}
}
@Override
public void onError(Throwable e) {
menuProg.setVisibility(View.INVISIBLE);
Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete() {
}
});
}
private void getFlashStory(){
Retrofit retrofit = RetrofitClient.getInstance();
ApiService apiService = retrofit.create(ApiService.class);
apiService.getFlashStory().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<FlashStoryModel>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(List<FlashStoryModel> flashStoryModels) {
if(flashStoryModels.size() > 0){
prog1.setVisibility(View.INVISIBLE);
storyList.addAll(flashStoryModels);
flashStoryAdapter = new FlashStoryAdapter(getActivity(),storyList);
flashStory.setAdapter(flashStoryAdapter);
final Handler handler = new Handler();
final Runnable update = new Runnable() {
@Override
public void run() {
if (currentPage == 6) {
currentPage = 0;
}
flashStory.setCurrentItem(currentPage++, true);
}
};
timer = new Timer(); // This will create a new Thread
timer.schedule(new TimerTask() { // task to be scheduled
@Override
public void run() {
handler.post(update);
}
}, DELAY_MS, PERIOD_MS);
}
}
@Override
public void onError(Throwable e) {
prog1.setVisibility(View.INVISIBLE);
Toast.makeText(getActivity(),e.getMessage(),Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete() {
}
});
}
有人请告诉我如何才能达到预期的结果。任何帮助将不胜感激。
谢谢
【问题讨论】:
-
你应该使用 Rxjava zip 操作符
标签: android retrofit2 rx-java2