android - 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()。
解决方案
你的问题是 Observable 没有完成,所以.toList()
永远不会被执行。
你说你需要过滤你得到的列表,但如果是这样的话,你有一个不同的选择。
而不是这样做:
.flatMap(poaDbs -> Flowable.fromIterable(poaDbs))
.filter(poaDb -> !poaDb.isDeleted())
.toList()
你想做:
.flatMapSingle(poaDbs -> Observable.fromIterable(poaDbs)
.filter(poaDb -> !poaDb.isDeleted())
.toList())
请注意,.filter
and.toList
运算符适用于内部 Observable。
额外说明:使用 Kotlin 时这更容易,因为它提供了filter
对集合的操作,并且您不必依赖 RxJava 或 Java8 流
推荐阅读
- python - ssl.SSLError: [SSL: UNSUPPORTED_PROTOCOL] Docker Python:3.6-slim 中不支持的协议 (_ssl.c:852)
- android - FTPS 无法在具有自签名证书的 Android 设备上连接
- java - 任何人都可以调试结果吗?并解释 x 的值
- java - 在 Spring 中将文件流从 http servlet 响应转换为 multipartfile
- python - 未见数据中不存在虚拟变量级别
- c# - C# StreamWriter 替换值的字符
- batch-file - 有没有办法在批处理脚本的变量中添加多行?
- php - 3 分钟后 504 网关超时(Docker 中的 Apache)
- python - 将 pandas 数据框放在 django 模板中
- c# - 使用 EF 将来自 API 的数据加入 SQL 表