RxJava 过滤器不发出结果来订阅

RxJava filter does not emit result to subscribe

我有 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()。

你的问题是 Observable 没有完成,所以 .toList() 永远不会被执行。
你说你需要过滤你得到的列表,但如果是这样的话,你有不同的选择。

而不是这样做:

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

您想做的事情:

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

请注意,.filter.toList 运算符应用于内部 Observable。

额外注意:使用 Kotlin 时更容易,因为它提供了对集合的 filter 操作,并且您不必依赖 RxJava 或 Java8 流