Правильный способ обработки 2-х последующих вызовов дооснащения в RxJava, где 2-й зависит от информации, возвращаемой в первом? - PullRequest
0 голосов
/ 18 июня 2019

Я знаю, что было задано много похожих вопросов, но я не могу найти решение, которое бы отвечало моим потребностям.Я новичок в RxJava, и у меня возникла досадная задача - принять на вооружение требование, которое оказалось довольно сложным.

Мое намерение:

  1. Я делаю один вызов repository.getDynamicScreenContent () , который возвращает наблюдаемый список объектов DynamicUtterance.
  2. Для каждого наблюдаемого элемента в ответе я делаю дополнительный вызов repository.updateDynamicUtteranceView , который возвращает больше данных, которые затем могут быть объединены с данными из предыдущего вызоваи кешируется в моей БД.

Код, который я до сих пор имел, который, наконец, не дает мне проблем с синтаксисом (по крайней мере), но все же попадает в окончательный перехват ошибок:

fun getAllDynamicUtterances(): LiveData<ArrayList<DynamicUtterance>>
{
    var uttList: ArrayList<DynamicUtterance>? = null
    disposable?.add(
        repository.getDynamicScreenContent().map { items ->
            items.uttSets.map { //items = DynamicUtterance
                var utt: DynamicUtterance? = null
                utt?.makeUtteranceFromScreenContentResponse(it)
                insertDynamicUtterance(utt!!)
                repository.updateDynamicUtteranceView(utt,"hi").map{ //it: SelectionStringResponse
                    utt.assignSelectionStrings(it)
                    uttList?.add(utt)
                    //how do i add to all dynamic values?

                }
            }
        }.subscribeOn(Schedulers.io())
         .observeOn(AndroidSchedulers.mainThread()).subscribe ({

             allDynamicUtterances?.value = uttList

         },{
             Log.e("errorHandle",it.toString()) //gets caught here
         })
    )
    return allDynamicUtterances!!
}

Очевидно, что бит подписки размещен неправильно, но везде, где я его размещаю (а также просто удаляю), происходит ошибка.

...