【发布时间】:2018-06-22 17:41:51
【问题描述】:
我想进行多个 API 调用(使用三个不同的查询)并合并结果,然后将它们显示在 onNext() 中。它正在工作,但我担心 flatMap 不适合这个。
@GET("www.examle.com/api/data/")
Observable<WebResultsResponse> getWebResults(@Query("param1") String query);
-----
private List<WebResult> resultsList;
private void requestWebResults(String query) {
resultsList.clear();
final Observable<List<WebResult>> observable = MainApplication.apiProvider.getApiProviderA.getWebResults("query1")
.subscribeOn(Schedulers.io())
.flatMap(new Function<WebResultsResponse, ObservableSource<List<WebResult>>>() {
@Override
public ObservableSource<List<WebResult>> apply(WebResultsResponse response) throws Exception {
if(response.getData() != null && response.getData().getResults() != null)
resultsList.addAll(response.getData().getResults());
return MainApplication.apiProvider.getApiProviderA.getWebResults("query2")
.flatMap(new Function<WebResultsResponse, ObservableSource<List<WebResult>>>() {
@Override
public ObservableSource<List<WebResult>> apply(WebResultsResponse response) throws Exception {
if(response.getData() != null && response.getData().getResults() != null)
resultsList.addAll(response.getData().getResults());
return MainApplication.apiProvider.getApiProviderA.getWebResults("query3")
.flatMap(new Function<WebResultsResponse, ObservableSource<List<WebResult>>>() {
@Override
public ObservableSource<List<WebResult>> apply(WebResultsResponse response) throws Exception {
if(response.getData() != null && response.getData().getResults() != null)
resultsList.addAll(response.getData().getResults());
return Observable.just(resultsList);
}
});
}
});
}
})
.observeOn(AndroidSchedulers.mainThread());
observer = new DisposableObserver<List<WebResult>>() {
@Override
public void onNext(List<WebResult> results) {
// do something with results
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
observable.subscribe(observer);
}
flatMap() 的用法正确吗?我可以以某种方式将resultsList 传递到链中,而不是将其声明为全局变量吗?
【问题讨论】:
标签: android rx-java rx-java2 flatmap