操作员"concat"无法正常工作。Kotlin+RxJava



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的好答案(即这个)

最新更新