感谢您的建议@insa\U c
我用RXJava2实现了这一点,下面是我如何用一般方式解释的:
首先,您需要将api服务定义为可观察的
@GET("url-1/")
Observable<List<Model1>> service1();
@GET("url-2/")
Observable<List<Model2>> service2();
现在,在您的活动中,按以下方式拨打电话:
final Observable<List<Model1>> call1 = APIClient.getClient().create(APIService.class).service1();
final Observable<List<Model2>> call2 = APIClient.getClient().create(APIService.class).service2();
现在,让我们使用zip创建一个唯一的可观察对象(我使用了一个列表,因为我正在向列表中添加两种不同类型的对象,当两个调用都完成时,我将得到这两种对象):
<Observable<List<Object>> test = Observable.zip(call1, call2, new BiFunction<List<Model1>, List<Model2>, List<Object>>() {
@Override
public List<Object> apply(List<Model1> objects1, List<Model2> objects2) throws Exception {
List<Object> list = new ArrayList<>();
list.addAll(objects1);
list.addAll(objects2);
return list;
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
现在唯一要做的就是订阅并决定要对这两个响应的内容做什么:
test.subscribe(new Observer<List<?>>() {
@Override
public void onSubscribe(Disposable d) {
Log.d("TAG", "onSubscribe");
}
@Override
public void onNext(List<?> objects) {
// You can split the list by object in here with an instanceof to determine if it's Model1 or Model2
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onComplete() {
// Do something here, both calls finished, if you stored something in onNext method you can use it here.
}
});
我希望这些信息能对某人有所帮助。