【问题标题】:RxJava filter does not emit result to subscribeRxJava 过滤器不发出结果来订阅
【发布时间】:2019-06-19 20:52:23
【问题描述】:

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

【问题讨论】:

  • 可能是因为我删除toList后它返回了所有结果,但我需要过滤数据。有没有其他方法以反应方式过滤数据?
  • getAllMine() 定义为Single<List<POAwhatever>>,您应该得到一个要过滤的结果列表。

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


【解决方案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 流

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多