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