首页 > 解决方案 > RxJava 过滤器不发出结果来订阅

问题描述

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

标签: androidrx-javarx-java2rx-android

解决方案


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

而不是这样做:

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

你想做:

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

请注意,.filterand.toList运算符适用于内部 Observable。

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


推荐阅读