Оператор «Конкат» не работает должным образом. Котлин + RxJava - PullRequest
0 голосов
/ 21 января 2019

все! Я хочу сначала получить данные в БД, а затем вызвать сервер, если БД пуста. Но у меня нет никакого ответа, когда я использую этот способ. Сначала я попытался вызвать сервер, и все прошло успешно. В чем дело??? Это мой код:

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 голосов
/ 21 января 2019

В зависимости от вашей логики вы должны рассмотреть возможность использования merge вместо concat для чередования элементов.В вашем случае getDataFromDB() не излучает, поэтому окончательный Flowable ждет его перед отправкой getDataFromServerFlowable(). Существует множество хороших ответов: слияние с конкатом (т.е. этот )

...