处理错误并在Rx中同时恢复可观察

时间:2016-06-04 07:54:22

标签: android error-handling rx-java

我编写了一个Android应用程序,当网络连接正常时从服务器获取数据,否则从本地数据库获取数据。从概念上讲,我有:

networkObservable.onErrorResumeNext(dbObservable).subscribe(...);

但是如果networkObservable遇到错误,我还想告知用户有关conncetion问题;不只是恢复DB observable。

但是现在在我看来,我要么恢复dbObservable,要么报告Subscriber onError()方法中发生了错误。这个问题有解决方案吗?

2 个答案:

答案 0 :(得分:0)

.doOnError()之前添加.onErrorResumeNext()

networkObservable
    .doOnError(informTheUser())
    .onErrorResumeNext(dbObservable)
    .subscribe(...);

答案 1 :(得分:0)

此问题的解决方案可能如下:

return networkObservable.onErrorResumeNext(
            Observable.concat(
                    dbObservable, Observable.create(new Observable.OnSubscribe<Data>() {
                        @Override
                        public void call(Subscriber<? super Data> subscriber) {
                            subscriber.onNext(null);
                        }
                    })
            )
    );

订阅者可以对空值做出反应并报告加载数据时出现问题。然而,在该解决方案中,关于错误的精确信息丢失我们仅使用Throwable替换null