Фильтр RxJava не выдает результат подписки - PullRequest
0 голосов
/ 19 июня 2019

У меня есть фильтр RxJava для получения только тех POA, которые не были удалены (деактивированы), и я совершенно уверен, что у меня есть один результат, но я не получаю никакого результата при подписке.

Disposable disposable = appDatabase.poaDao().getAllMine()
    .flatMap(poaDbs -> Flowable.fromIterable(poaDbs))
    .filter(poaDb -> !poaDb.isDeleted())
    .toList()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(poaDbs ->
                   view.onActivePoasIssuedByMe(poaDbs),
               throwable -> view.handleError(throwable));

Что можетбыть причиной?Я пробовал отладку, но никогда не попадал в sunbscribe ().

1 Ответ

1 голос
/ 19 июня 2019

Ваша проблема в том, что Observable не завершается, поэтому .toList() никогда не будет выполнено.
Вы сказали, что вам нужно отфильтровать список, который вы получаете, но если это так, у вас есть другой вариант.

Вместо этого:

.flatMap(poaDbs -> Flowable.fromIterable(poaDbs))
    .filter(poaDb -> !poaDb.isDeleted())
    .toList()

Вы хотите сделать:

.flatMapSingle(poaDbs -> Observable.fromIterable(poaDbs)
     .filter(poaDb -> !poaDb.isDeleted())
     .toList())

Обратите внимание, что операторы .filter и .toList применяются к внутренней наблюдаемой.

Дополнительное примечание: это еще проще при использовании Kotlin, поскольку он обеспечивает операцию filter для коллекций, и вам не нужно полагаться на потоки RxJava или Java8

...