Flowable.concatArray не работает - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь реализовать этот подход к шаблону репозитория с использованием Rx & Room. У меня есть API для поиска категорий:

interface CategoryApi {
    @GET("/categorytags")
    fun getCategories(): Single<List<CategoryTagHolder>>
}

Это мой репозиторий:

class CategoryRepositoryImpl(private val categoryDao: CategoryDao,
                             private val categoryApi: CategoryApi,
                             private val scheduleProvider: SchedulerProvider, loginRepository: LoginRepository) : AuthRepository(loginRepository), CategoryRepository {


    override fun getCategories(): Flowable<List<Category>> {
        return Flowable.concatArray(
                categoryDao.getCategories().doOnNext {
                    Timber.w("Retrieving Categories from Local DB!")
                },
                getCategoriesFromRemote().doOnNext {
                    Timber.w("Retrieving Categories from API!")
                }
    }

private fun getCategoriesFromRemote() =
            fromFlowable(categoryApi.getCategories().toFlowable())
            .flatMap {
                if (it.isNotEmpty()) {
                    Flowable.just(it[0].categories)
                } else {
                    Flowable.just(listOf())
                }
            }
            .doOnNext {
                saveCategoriesInDb(it)
            }
}

А это мой DAO:

@Dao
interface CategoryDao {
    @Query("select * from category")
    fun getCategories(): Flowable<List<Category>>

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun saveAllCategories(categories: List<Category>)

}

Независимо от того, как я это делаю, я всегда получаю пустой список, потому что при инициализации моя БД пуста! В логах отображается только "Retrieving Categories from Local DB!". Если я поменяю местным и удаленным вызовом, то будут показаны обе строки журнала, но это противоречит цели этого подхода.

Что я могу делать не так?

Это модель представления:

 fun getFilters() {
        categoryRepository.getCategories()
                .subscribeOn(schedulerProvider.io())
                .observeOn(schedulerProvider.ui())
                .subscribeBy(onNext = {
                    Timber.e("Got cat list $it")
                    categories.value = Result.success(it)
                },
                        onError = {
                            Timber.e("ERROR ${it.message}")
                        }).addTo(disposables)
    }

Ошибка не отображается.

...