全部!我想首先获取数据库中的数据,如果数据库为空,则要调用服务器。但是当我使用这种方式时,我没有任何回应。我最初尝试调用服务器,但成功。怎么了???这是我的代码:
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>>
答案 0 :(得分:3)
根据您的逻辑,应考虑使用merge
而不是concat
来插入元素。在您的情况下,getDataFromDB()
没有发出,因此最后的Flowable
在发出getDataFromServerFlowable()
之前正在等待它, merge vs concat (即this one)