android - 如何在 RxAndroid2 中组合 2 条代码链?
问题描述
我需要从共享首选项中请求一些数据并进行一些检查更新共享首选项然后返回布尔值我需要将其保留在计算线程中。如果返回为真我需要继续下面的代码,否则我需要调用 doSomething2( ) 我的问题是我应该如何结合这 2 部分代码,其中第一部分Flowable.just(isPayable())
应该在计算线程中订阅,并基于返回值继续使用现有解决方案
.update(info)
.observeOn(mMainThreadScheduler)
.subscribe(() -> doSomething1{
}),
(Throwable throwable) -> doSomething2())
解决方案
不要使用
Flow.just(isPayable())
- 它可能不会在计算调度程序中执行。使用
Flow.defer(()->Flow.just(isPayable()))
或
Flow.fromCallable(() ->isPayable() )
结果:
Flow.fromCallable(() ->isPayable() )
.flatMap(value->
if(value){ doSomething1() }else { doSomething2() }
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({},{})
)
或者,如果你 doSomething1() / doSomething2() 做一些 UI 工作,你也可以将 isPayable()== false 标记为错误,这样做: Single.fromCallable(() ->isPayable() ) .map{ value -> if(value) return value else throw Exception("notpaid") } .subscribeOn(Schedulers.computation()) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ doSomething1()},{ doSomething2()} )
推荐阅读
- javascript - 在 React 中测试简单的函数
- google-chrome - Chrome 不记得某个 Google 密码
- node.js - 在另一个 API 中调用 API 会返回错误 [ERR_HTTP_HEADERS_SENT]:
- python - OpenGL:法线贴图(凹凸贴图)的哪些着色器?
- apache-kafka - 多个组共享相同配置的分布式 Kafka 源连接器
- go - 当我不知道 yaml 中的每个可能字段时,如何在 go 中修改 yaml 字段?
- sql - 使用连接列加入 Hive
- python - 在 pandas 中识别稀疏 nan 的时间序列中的数据组
- mysql - 拒绝访问 root@localhost mysql
- amazon-athena - Athena 究竟何时需要使用 MSCK REPAIR TABLE 重新扫描分区?