【发布时间】:2017-01-11 16:57:56
【问题描述】:
这是我的用例:
我正在开发一个应用程序,它通过 REST API 与服务器通信,并将接收到的数据存储在 SQLite 数据库中(它使用它作为某种缓存)。
当用户打开屏幕时,必须发生以下情况:
- 如果可用,则从数据库加载数据。
- 应用调用 API 刷新数据。
- API 调用的结果被持久化到数据库中。
- 截获数据更改通知时,从数据库重新加载数据。
这与here 提出的案例非常相似,但略有不同。
因为我使用的是 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);
})
})
看起来它工作正常,但它看起来并不优雅和“正确”。
您能否建议或指出一个资源来解释处理这种情况的最佳方法是什么?
【问题讨论】:
标签: android rx-java retrofit2 sqlbrite