首页 > 解决方案 > 如何在 RxAndroid2 中组合 2 条代码链?

问题描述

我需要从共享首选项中请求一些数据并进行一些检查更新共享首选项然后返回布尔值我需要将其保留在计算线程中。如果返回为真我需要继续下面的代码,否则我需要调用 doSomething2( ) 我的问题是我应该如何结合这 2 部分代码,其中第一部分Flowable.just(isPayable())应该在计算线程中订阅,并基于返回值继续使用现有解决方案

 .update(info)
 .observeOn(mMainThreadScheduler)
 .subscribe(() -> doSomething1{
           }),
          (Throwable throwable) -> doSomething2())

标签: androidrx-java2

解决方案


不要使用 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()} )


推荐阅读