Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 在Rx java中将缓存与concat操作符集成时出现问题_Kotlin_Retrofit_Rx Java_Rx Java2 - Fatal编程技术网

Kotlin 在Rx java中将缓存与concat操作符集成时出现问题

Kotlin 在Rx java中将缓存与concat操作符集成时出现问题,kotlin,retrofit,rx-java,rx-java2,Kotlin,Retrofit,Rx Java,Rx Java2,通过以下链接实现缓存: fun getSavedAddressList():可能吧?{ 返回可观察的.concat( getAddressListMemory(), getAddressListDatabase(), getAddressListNetwork()).firstElement() } fun getAddressListDatabase():可观察{ 返回Observable.create(ObservableOnSubscribe{emitter:ObservableEmit

通过以下链接实现缓存:

fun getSavedAddressList():可能吧?{
返回可观察的.concat(
getAddressListMemory(),
getAddressListDatabase(),
getAddressListNetwork()).firstElement()
}
fun getAddressListDatabase():可观察{
返回Observable.create(ObservableOnSubscribe{emitter:ObservableEmitter->
val list:ArrayList=addressDao.getAddressList()作为ArrayList
if(list.isNotEmpty()){
emitter.onNext(列表)
}
emitter.onComplete()
if(list.isNotEmpty())
getAddressListNetwork().subscribeOn(schedulerProvider.io())?.observeOn(schedulerProvider.io())?.subscribe()
})
}
数据库中的项在存储到数据库中后可以完美地检索

问题是从数据库获取列表后,网络调用未发生


我想依次获取三个数据源,并将最新数据存储在数据库中

首先,您在那里泄漏了
getAddressListNetwork
可丢弃的
,因为您试图在
getAddressListDatabase
中执行太多操作

我想你想要的是:

fun getSavedAddressList(): Observable<List<SavedAddress>> {
    return Observable.concat(
            getAddressListMemory(),
            getAddressListDatabase(),
            getAddressListNetwork()).distinctUntilChanged())
}
fun getSavedAddressList():可观察{
返回可观察的.concat(
getAddressListMemory(),
getAddressListDatabase(),
getAddressListNetwork()).distinctUntilChanged())
}
这将始终尝试从3个源获取地址,并且仅在数据与之前的发送不同时才发送,这意味着数据“更新鲜”


老实说,我认为您需要了解“过时数据”和“缓存失效”的概念。请确保
getAddressListDatabase()
调用
onComplete()
,否则,
concat
不会切换到下一步Observable@borichellow更新了我的代码最后一行的用途是什么?您为什么需要它?@borichellow从数据库获取数据后,在成功响应后调用getAddressListNetwork,将新数据存储到数据库中
fun getSavedAddressList(): Observable<List<SavedAddress>> {
    return Observable.concat(
            getAddressListMemory(),
            getAddressListDatabase(),
            getAddressListNetwork()).distinctUntilChanged())
}