A, B, C являются объектами
Все вызовы функций выполняются в БД Rooms
Этот фрагмент кода находится внутри ViewModel
repo = Repository
Итак, я делаю приложение для Android (не могу предоставить подробности), и для определенного экрана мне нужно сделать следующее.
Мой первый вызов - repo.getInfo, который возвращает Single Observable ListOfA: Single<List<A>>
// выполнить некоторые операции
для каждого элемента ListOfA Мне нужно вызвать другую функцию repo.getB (A), которая возвращает Single Observable ListOfB: Single<List<B>>
// выполнить некоторые операции
для каждого элемента ListOfB мне нужно вызвать другую функцию repo.getC (B), которая возвращает Single Observable ListOfC: Single<List<C>>
// выполнить некоторые операции
после того, как у меня есть необходимые данные, мне нужновызовите другую функцию, которая объединяет данные для отображения в пользовательском интерфейсе.
Теперь я не могу заставить это работать. Вот что я попробовал. Но поток останавливается на линии, помеченной THIS LINE, и переходит к блоку подписки. Индивидуальные вызовы функций работают, поэтому данные не являются проблемой. Я довольно новичок в этом и, честно говоря, не в своей тарелке. Любая помощь или подсказка приветствуется. Спасибо
localListOfA = emptyList<A>()
localListOfB = emptyList<B>()
localListOfC = emptyList<C>()
compositeDisposable.add(
getInfo.map{listOfA ->
localListOfA.addAll(listofA)
listOfA.map {elementA -> ////THIS LINE
getB(elementA.id).map{listOfB ->
listOfB.filter {
//some logic to select a few objects
}
}.map { it // filtered list of B
localListofB.addAll(it)
localListOfB.last() //I only need the top element of this list
}.map{elementB ->
getC(elementB.id).map{ listOfC ->
localListOfC.addAll(listOfC)
//do some operations
}
}
}
}
.subscribeOn(DEFAULT_CACHED_SCHEDULERS)
.observeOn(AndroidSchedulers.mainThread())
.doOnError(/*take log*/)
.subscribe{
prepareUi()
}
)