【发布时间】:2016-04-04 11:20:13
【问题描述】:
我正在使用改造 (1.9) 并试图找出如何调用 2 个 api 并合并结果。
我猜应该在最后一个 api 完成返回响应后合并结果...
我该怎么做?
更新,根据 Antons 的回答,我尝试了以下方法:
添加到 gradle:
compile 'io.reactivex:rxjava:1.0.+'
compile 'io.reactivex:rxandroid:0.23.+'
API接口
@GET("/maps/api/place/details/json")
Observable<PlaceDetailResult1> getPlacesFrom1( @Query("key") String key, @Query("placeid") String placeid);
@GET("api/places/{id}/ratings")
Observable<PlaceDetailResult2> getPlacesFrom2(@Path("id") String id);
在片段中
IPlaces api = adapter.create(IPlaces.class); //endpoint1
IPlaces api2 = adapter2.create(IPlaces.class); //endpoint2
Observable.combineLatest(
api.getPlacesFrom1("key", placeId),
api2.getPlacesFrom2(placeId),
new Func2<PlaceDetailResult1, PlaceDetailResult2, MergedReviews>() {
@Override
public MergedReviews call(PlaceDetailResult placeDetailResult1, PlaceDetailResult2 placeDetailResult2) {
// processToMerge( placeDetailResult1, placeDetailResult2)
return mr;
}
})
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<MergedReviews>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(MergedReviews mr) {
SetAdapter(mr.reviews);
SetPhotosAdapter(mr.photos);
}
});
有一点可能值得注意,当我将 RxJava 添加到 gradle 时,我遇到了一些错误,在我在 gradle 文件中执行 multiDexEnabled true 后,该错误就消失了
【问题讨论】:
-
在改造中使用 RxJava
-
@MD 是 RxJava 使用改造的唯一方法吗?
-
@raklos 当然,您可以创建全局计数器并继续结果,当计数器变为零时(如果您在成功响应后递减它)但这很痛苦,RxJava 更安全、更酷、更容易
-
@AntonShkurenko 添加了更多代码