【发布时间】:2019-01-21 16:45:49
【问题描述】:
全部!我想首先在数据库中获取数据,如果数据库为空,则调用服务器。但是当我使用这种方式时,我没有任何反应。我一开始尝试调用服务器,它成功了。怎么了???这是我的代码:
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>>
【问题讨论】:
-
不清楚
getDataFromRepository的含义是什么,你没有返回任何东西,只是data.postValue(cars)(也不清楚你在用它做什么) -
这是 MVVM 模式。对这个案子没关系。因为我想在这个街区有车。
-
如果代码不相关,请将其删除,这会使尝试帮助您的人变得更加困难
-
我只是一般不会使用
com.github.vicpinm:krealmextensions库,这很糟糕。
标签: kotlin realm retrofit2 rx-java2