Сжатие «Возможно» и «Одиночного» не приводит к выдаче результата - PullRequest
0 голосов
/ 04 октября 2018

Я делаю приложение для Android.Я должен сжать результаты из двух мест: одно из SharedPreferences как Maybe и другое из библиотеки Room Persistence (в основном SQLite) как Flowable.

Я использую следующий код:

repository.getMaybe()
    .subscribeOn(Schedulers.io)
    .toSingle()
    .zipWith(repository.getFlowable().single(DEFAULT VALUE), BiFunction { t1: DataType1, t2: DataType2 -> Pair(t1, t2) }
    .subscribe()

repository.getMaybe() - источник Maybe, упомянутый в первом абзаце.Аналогично, repository.getFlowable() является источником Flowable.

Я пытался использовать doOnEvent (для записи операторов) в источнике Maybe, источнике Flowable и архивном источнике.Только источник Maybe излучает успешно.Другие вообще ничего не делают.

Источник Flowable используется в других частях моего приложения, и это совсем не проблема.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Благодаря Akarnokd я попытался удалить часть single(DEFAULT ITEM).Это сработало.При просмотре документации на http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Flowable.html, я наткнулся на это:

single (T defaultItem)

Возвращает Single, который испускает один элемент, испускаемый исходным издателем., если этот издатель испускает только один элемент или элемент по умолчанию, если исходный издатель не испускает никаких элементов.

По сути, Flowable должен излучаться только один раз.Итак, я использую firstOrError() вместо него.

0 голосов
/ 04 октября 2018

Если ваш Maybe не возвращает значение, то вызов toSingle приведет к Single.error.Это будет означать, что он достигнет zipWith в виде стрелки и никогда не будет труден при оценке значения, так как нет значения для архивирования.

...