即時通訊使用改進(1.9),並試圖找出我可以如何調用2 apis和合並結果。多個請求與改造合併結果
我想,當最後一個API完成返回響應結果應該合併...
我怎麼能這樣做呢?
UDPATE,按照Antons答案我曾嘗試以下:
加入到搖籃:
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);
}
});
一個事情aybe值得注意的是,當我加入RxJava到搖籃我是收到的一些錯誤,我在gradle這個文件
使用RxJava進行改造 –
@MD是RxJava是使用改造的唯一方法嗎? – raklos
@raklos當然,您可以創建全局計數器並繼續執行結果,當計數器變爲零(如果您在成功響應後遞減)但這很痛苦,RxJava更安全,更酷,更容易 –