У меня есть класс данных Category
и класс данных Plan
. Каждый Category
имеет список идентификаторов планов. Категории и планы хранятся в комнате. Я пытаюсь создать локальный List<Any>
, где я добавляю каждую категорию в список, а затем добавляю каждый из своих планов.
Итак, для каждой категории добавьте категорию в список, а затем добавьте каждый план, принадлежащий этой категории.
Окончательный результат будет выглядеть примерно так...
0 -> a Category
1 -> a Plan
2 -> a Plan
3 -> a Plan
4 -> a Category
5 -> a Plan
и т. д.
Следующие вызовы успешно возвращают Observable<List<Category>>
и Observable<Plan>
AppDatabase
.getDatabase(context)
.categoryDao()
.getAll()
AppDatabase.getDatabase(context).planDao().getPlan(planId)
Здесь я пытаюсь создать свой список, но на самом деле он никогда не излучается, когда я подписываюсь на него. Нет завершения или ошибка. Все остальное в потоке попадает под удар. Почему я не могу получить окончательный результат?
fun fetchCategoriesAndPlans() {
val items = mutableListOf<Any>()
AppDatabase
.getDatabase(context)
.categoryDao()
.getAll()
.concatMap { listOfCategories ->
listOfCategories.toObservable()
}
.doOnNext { category ->
items.add(category)
}
.concatMap { category ->
category.getPlanIds()!!.toObservable()
}
.flatMap { planId ->
AppDatabase.getDatabase(context).planDao().getPlan(planId)
}.collectInto(items, BiConsumer{ list, i ->
Log.d(TAG, "Collect into")
list.add(i)
})
.subscribeBy(
onSuccess = {
Log.d(TAG, "Got the list")
},
onError = {
Log.e(TAG, "Couldn't build list ${it.message}", it)
})
}
collectInto()
.collectInto()
ничего не излучает, пока исходный поток не завершится..categoryDao().getAll()
on Room возвращает бесконечный поток, который никогда не завершается. Данный ответ будет работать, потому что ответ используетSingle
вместоObservable
. - person Sanlok Lee   schedule 16.07.2019val items = mutableListOf<Any>(); doOnNext { items.add(it) }
не сработало бы. - person EpicPandaForce   schedule 16.07.2019