【发布时间】:2017-05-11 14:28:32
【问题描述】:
我正在使用带有 Retrofit2 的 RxJava 和 RxAndroid。
Observable<ResponseOne> responseOneObservable = getRetrofitClient().getDataOne()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
Observable<ResponseTwo> responseTwoObservable = getRetrofitClient().getDataTwo()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
在上面的两个观察者上使用如下的 zip 操作符。
Observable<ArrayList<TestData>> testDataObservable = Observable.zip(responseOneObservable, responseTwoObservable, new Func2<ResponseOne, ResponseTwo, ArrayList<TestData>>() {
@Override
public ArrayList<TestData> call(ResponseOne responseOne, ResponseTwo responseTwo) {
ArrayList<TestData> testDataList = new ArrayList();
// Add test data from response responseOne & responseTwo
return testDataList;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<ArrayList<TestData>>() {
@Override
public void onNext(ArrayList<TestData> testDataList) {
}
@Override
public void onCompleted() {
Log.d(TAG, "onCompleted" );
}
@Override
public void onError(Throwable t) {
Log.d(TAG, "onError Throwable: " + t.toString() );
}
});
如果在responseOneObservable和responseTwoObservable改造http调用过程中出现任何错误,则会直接调用testDataObservable的订阅者的onError方法。
我想继续使用 zip 运算符的 call 方法,即使两个 observable 中的任何一个都得到了成功响应。
如何使用zip 操作符处理错误响应?
【问题讨论】:
-
我相信
onErrorResumeNext应该允许你这样做。 -
如果其中一个可观察对象返回 NULL,你知道该怎么做吗? stackoverflow.com/questions/50334430/…
标签: android error-handling rx-java retrofit2 rx-android