2 回答

TA贡献1942条经验 获得超3个赞
你可以做这样的事情,
Observable<RootiTune> ituneObservable = serviceItune
.getItuneArtistNameRx2NoList(ServiceItune.API_ITUNE_BASE_FULL_URL, query);
Observable<RootLastFm> lastFmObservable = serviceLastFm
.searchArtistRx(ServiceLastFm.API_LAST_FM_FULL_URL, query, ServiceLastFm.KEY_LAST_FM);
Observable
.zip(
ituneObservable,
lastFmObservable,
(BiFunction<RootiTune, RootLastFm, Pair<RootiTune, RootLastFm>>) (ituneResult, lastFmResult) -> Pair
.create(ituneResult, lastFmResult)
)
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
list -> listOfPair,
error -> {
// TODO handle error
}
);
获得 Pair 列表后,遍历列表并执行
pair.first to get RootiTune
pair.second to get RootLastFm

TA贡献1848条经验 获得超2个赞
如果你不具备基本的接口RootiTune和RootLastFm,你可以使用Observable#zip()。首先,为两个结果创建包装器:
class ResultWrapper(RootiTune ituneResult, RootLastFm lastFmResult) {
public final RootiTune ituneResult;
public final RootLastFm lastFmResult;
public ResultWrapper(RootiTune ituneResult, RootLastFm lastFmResult) {
this.ituneResult = ituneResult;
this.lastFmResult = lastFmResult;
}
}
之后,您可以压缩源:
Observable<RootiTune> ituneObservable = serviceItune.getItuneArtistNameRx2NoList(ServiceItune.API_ITUNE_BASE_FULL_URL,query);
Observable<RootLastFm> lastFmObservable = serviceLastFm.searchArtistRx(ServiceLastFm.API_LAST_FM_FULL_URL, query,ServiceLastFm.KEY_LAST_FM);
Observable.zip(ituneObservable, lastFmObservable, (ituneResult, lastFmResult) -> new ResultWrapper(ituneResult, lastFmResult))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(resultWrapper -> {
responseFmLiveData.setValue(resultWrapper.lastFmResult);
responsItuneeLiveData.setValue(resultWrapper.ituneResult);
},
error -> {
// TODO handle error
});
添加回答
举报