【发布时间】:2020-08-08 02:39:48
【问题描述】:
通过以下链接实现缓存: https://blog.mindorks.com/implement-caching-in-android-using-rxjava-operators
fun getSavedAddressList(): Maybe<List<SavedAddress>?>? {
return Observable.concat(
getAddressListMemory(),
getAddressListDatabase(),
getAddressListNetwork()).firstElement()
}
fun getAddressListDatabase(): Observable<List<SavedAddress>?> {
return Observable.create(ObservableOnSubscribe { emitter: ObservableEmitter<List<SavedAddress>?> ->
val list: ArrayList<SavedAddress> = addressDao.getAddressList() as ArrayList<SavedAddress>
if (list.isNotEmpty()) {
emitter.onNext(list)
}
emitter.onComplete()
if (list.isNotEmpty())
getAddressListNetwork().subscribeOn(schedulerProvider.io())?.observeOn(schedulerProvider.io())?.subscribe()
})
}
数据库中的项目在存储到数据库后可以完美检索
问题是从数据库中获取列表后没有发生网络调用
我想依次获取三个数据源,并将最新的数据存储到数据库中
【问题讨论】:
-
确保
getAddressListDatabase()调用onComplete(),否则concat不会切换到下一个Observable -
@borichellow 更新了我的代码
-
最后一行
getAddressListNetwork().subscribeOn()...的目的是什么?为什么需要它? -
@borichellow 在成功响应后从数据库调用 getAddressListNetwork 获取数据后将新数据存储到数据库
标签: kotlin retrofit rx-java rx-java2