RxJava过滤器不发出要订阅的结果

时间:2019-06-19 11:05:12

标签: android rx-java rx-java2 rx-android

我有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 个答案:

答案 0 :(得分:1)

您的问题是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流。