我有2个数据源:数据库和服务器。当我启动应用程序时,我从存储库(MyRepository)调用该方法:
public Observable<List<MyObj>> fetchMyObjs() {
Observable<List<MyObj>> localData = mLocalDataSource.fetchMyObjs();
Observable<List<MyObj>> remoteData = mRemoteDataSource.fetchMyObjs();
return Observable.concat(localData, remoteData);
}
我订阅如下:
mMyRepository.fetchMyObjs()
.compose(applySchedulers())
.subscribe(
myObjs -> {
//do somthing
},
throwable -> {
//handle error
}
);
我希望数据库中的数据加载速度更快,当从网络下载数据完成后,我只需更新Activity中的数据。
连接互联网后,一切运作良好。但是当我们在没有连接到网络的情况下打开应用程序时,mRemoteDataSource.fetchMyObjs();
抛出UnknownHostException
并且所有Observable结束(localData
的订阅者不起作用(尽管日志告诉来自数据库已被采取))。当我尝试再次从MyRepository类(通过SwipeRefresh)调用fetchMyObjs()
方法时,将触发localData
的订阅者。
如何摆脱网络关闭时,应用程序启动时,订阅者是否适用于localData
?
答案 0 :(得分:1)
尝试一些错误处理操作符:
https://github.com/ReactiveX/RxJava/wiki/Error-Handling-Operators
我猜onErrorResumeNext()会很好,但你必须自己测试一下。也许这样的事情对你有用:
Observable<List<MyObj>> remoteData = mRemoteDataSource.fetchMyObjs()
.onErrorResumeNext()
另外,我无法判断你的想法是否正确,但考虑重建这一流程可能值得考虑。忽视错误是不对的 - 这是肯定的;)
答案 1 :(得分:0)
您可以将 observeOn(Scheduler scheduler, boolean delayError) 和 delayError 设置为 true 来观察您的链。
<块引用>delayError - 指示 onError 通知是否可能不会在调度边界的另一侧提前 onNext 通知。如果为 true,则以 onError 结尾的序列将按照从上游接收到的相同顺序重放