Привет, я пытаюсь реализовать Единый наблюдаемый, который объединяет два запроса вместе.
В промежутке между двумя запросами, которые я делаю, я уведомляю обратный вызов, чтобы обновить интерфейс с ответом от запроса, а затем запустить следующий запрос в потоке Schedulaers.io.
Проблема, с которой я сталкиваюсь, заключается в том, что она пытается обновить пользовательский интерфейс из потока schedulars.io, и результаты ничего не обновляются в потоке ui.
i cold wrap the calback на блоке кода RunOnUiThread в android, но интересно, есть ли более элегантный способ сделать это?
я проверил couroutines, и, похоже, дело только в том, чтобы поместить блок кода в отдельный поток.
Вот мой текущий код
override fun getHomeScreenInformation() { delegator.requestOne() .flatMap { responseOne-> homeScreenCallBack.onResponseOneRecieved(responseOne) delegator.requestTwo() } .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe( {responseTwo-> homeScreenCallBack.onResponseTwoRecieved(responseTwo)}, {error -> homeScreenCallBack.onError()} ) }
Примените observeOn(AndroidSchedulers.mainThread())
столько раз, сколько необходимо:
delegator.requestOne() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) // <---------------------- .flatMap { responseOne -> homeScreenCallBack.onResponseOneRecieved(responseOne) delegator.requestTwo() .subscribeOn(Schedulers.io()) // <---------------------- } .observeOn(AndroidSchedulers.mainThread()) .subscribe( {responseTwo-> homeScreenCallBack.onResponseTwoRecieved(responseTwo)}, {error -> homeScreenCallBack.onError()} )