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 流
我有 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 流