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

时间:2019-01-21 16:45:49

标签: kotlin realm retrofit2 rx-java2

全部!我想首先获取数据库中的数据,如果数据库为空,则要调用服务器。但是当我使用这种方式时,我没有任何回应。我最初尝试调用服务器,但成功。怎么了???这是我的代码:

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>>

1 个答案:

答案 0 :(得分:3)

根据您的逻辑,应考虑使用merge而不是concat来插入元素。在您的情况下,getDataFromDB()没有发出,因此最后的Flowable在发出getDataFromServerFlowable()之前正在等待它, merge vs concat (即this one