all!我想首先在数据库中获取数据,如果数据库为空,则调用服务器。但是当我使用这种方式时,我没有任何反应。我一开始尝试调用服务器,它成功了。怎么了???这是我的代码:
private fun getDataFromRepository() {
val subscription =
carRepository.getCars()!!.
subscribeOn(Schedulers.io()).
observeOn(AndroidSchedulers.mainThread()).
subscribe(
{ cars ->
LOG.info(cars.size.toString())
carRepository.saveCarsInDB(cars)
data.postValue(cars)
},
{ e ->
loadError.postValue(e.toString())
LOG.warning(e.toString())
})
subscriptions.add(subscription)
}
流动性:
fun getCars(): Single<List<Car>>? {
val db = getDataFromDB()
val server = getDataFromServerFlowable()
val mock = getDataFromMock()
return Flowable.concat(db, server).first(mock)
}
private fun getDataFromServerFlowable(): Flowable<List<Car>> {
return carApi.getPostsFlowable()
}
private fun getDataFromDB(): Flowable<List<Car>> {
return RealmCar().queryAllAsFlowable() //"com.github.vicpinm:krealmextensions:2.4.0"
.map { cars -> mapper.convertListRealmCarToListCar(cars) }
.filter { car -> car.isNotEmpty()}
}
private fun getDataFromMock(): List<Car> {
val cars: MutableList<Car> = mutableListOf()
val car = Car(0, 0, "Test", "Test", "Test")
cars.add(car)
return cars
}
服务器调用:
@GET("/photos")
fun getPostsFlowable(): Flowable<List<Car>>
根据您的逻辑,您应该考虑使用 merge
而不是 concat
来交错元素。在你的情况下getDataFromDB()
没有发出,所以最后的Flowable
在发出getDataFromServerFlowable()
之前等待它,有很多合并与concat的好答案(即这个)