我有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吗?

最佳答案

尝试一些错误处理运算符:

https://github.com/ReactiveX/RxJava/wiki/Error-Handling-Operators

我猜onErrorResumeNext()会很好,但是您必须自己进行测试。也许这样的事情对你有用:

Observable<List<MyObj>> remoteData = mRemoteDataSource.fetchMyObjs()
      .onErrorResumeNext()

另外,我无法判断您的想法是否正确,但也许值得考虑重新构建这种流程。忽略错误是不正确的-可以肯定;)

07-28 01:50