这是我的用例:
我正在开发一个应用程序,它通过 REST API 与服务器通信,并将接收到的数据存储在 SQLite 数据库中(它使用它作为某种缓存)。
当用户打开屏幕时,必须发生以下情况:
- 如果可用,则从数据库加载数据。
- 应用调用 API 刷新数据。
- API 调用的结果被持久化到数据库中。
- 当数据更改通知被拦截时,数据会从数据库中重新加载。
这与此处介绍的情况非常相似,但略有不同。
由于我使用的是 SQLBrite,因此 DB observables 不会终止(因为那里有一个ContentObserver
注册,它将新数据推送到流中),所以像这样的方法concat
,merge
不起作用。
目前,我已经使用以下方法解决了这个问题:
Observable.create(subscriber -> {
dbObservable.subscribe(subscriber);
apiObservable
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.subscribe(
(data) -> {
try {
persistData(data);
} catch (Throwable t) {
Exceptions.throwOrReport(t, subscriber);
}
},
(throwable) -> {
Exceptions.throwOrReport(throwable, subscriber);
})
})
看起来它工作正常,但它看起来并不优雅和“正确”。
您能否建议或指出一个资源来解释处理这种情况的最佳方法是什么?