RxJava, как обновлять представления в разных состояниях цепочки вызовов Observables?

Мне нужно выполнить одну задачу, используя один Observable, получить испускаемые данные, а затем использовать другой Observable для выполнения другого запроса. Обычно я бы использовал flatmap для объединения двух Observables и просто заботился о последнем фрагменте данных. Теперь необходимо обновить представление в процессе. Скажем, когда первый Observable выдает данные, я должен показать текстовую строку в пользовательском интерфейсе.

Я знаю, что могу разбить его на два времени вызова, вызывая 2nd Observable внутри onNext() первого, но это громоздко.

Как я могу достичь того, что я описал выше, не идя по этому пути? Спасибо


person EyeQ Tech    schedule 09.08.2015    source источник


Ответы (1)


Вот пример из старого проекта с doOnNext( ):

API.getVideoListObservable()
                .doOnError(t -> t.printStackTrace())
                .map(r -> r.getObjects())
                .doOnNext(l -> VideoActivity.this.runOnUiThread(() -> fragment.updateVideoList(l)))
                .doOnNext(l -> kalturaVideoList.addAll(l))
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe();

Обратите внимание на .doOnNext(l -> VideoActivity.this.runOnUiThread(() -> fragment.updateVideoList(l))) - после него вы можете использовать flatmap() сколько угодно раз, а doOnNext() будет выполняться до flatmap()

Хорошее объяснение doOnNext() от Саймона Базле здесь:

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

onNext более окончательный, он потребляет значение.

person Aleksandr    schedule 09.08.2015