我试图将我的Handler方法替换为Rx java.我的要求
我想在5秒后调用方法getTransactionDetails().
这是我使用Handler的工作代码
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
getTransactionDetails();
}
}, 5000);
Run Code Online (Sandbox Code Playgroud)
Rx java代码 - 它不起作用
Observable.empty().delay(5000, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(o -> getTransactionDetails())
.subscribe();
Run Code Online (Sandbox Code Playgroud)
Cly*_*yde 76
我就是这样做的:
Completable.timer(5, TimeUnit.SECONDS, AndroidSchedulers.mainThread())
.subscribe(this::getTransactionDetails);
Run Code Online (Sandbox Code Playgroud)
甲Completable表示不带任何值,但是完成或异常的指示的延迟计算.静态方法调用在指定的时间段过去后timer()返回一个Completable表示完成的信号,subscribe()调用将意味着getTransactionDetails()当计时器触发时将在当前对象上调用该方法.通过提供一个Scheduler作为最后一个参数来Completable.timer()控制用于执行的线程getTransactionDetails().
Geo*_*izy 47
doOnNext()是副作用.它可以用于例如记录目的,因为日志记录不会改变数据流.但是你想传递结果getTransactionDetails(),所以你应该使用map.
其次,Observable.empty()创建一个Observable只是传播光洁度/去除消息,它既不引发doOnNext()既不map().您可以使用Observable.just()相反的方法修复此问题,但更常用的方法是使用Observable.timer():
Observable.timer(5000, TimeUnit.MILLISECONDS)
.map(o -> getTransactionDetails())
.observeOn(AndroidSchedulers.mainThread())
.subscribe( ... );
Run Code Online (Sandbox Code Playgroud)
关于调度程序的最后说明.Observable.timer()并且delay()默认情况下在计算调度程序上执行,因此您无需调用在主线程外.subscribeOn(Schedulers.io())执行getTransactionDetails().Observable.timer()并且如果你想控制它,delay()可以将a Scheduler作为参数.因此,.observeOn(AndroidSchedulers.mainThread())如果要getTransactionDetails()在UI线程上使用结果,则需要调用.每个运算符observeOn()都在定义后执行Scheduler,因此您必须observeOn()在计算之后执行.
编辑:这当然是你关心的结果getTransactionDetails().如果没有,请参阅克莱德的回答.
小智 13
Observable
.timer( 5000, TimeUnit.MILLISECONDS )
.subscribeOn(Schedulers.io())
.map(o -> getTransactionDetails() )
.subscribe();
Run Code Online (Sandbox Code Playgroud)
你不需要observeOn因为订阅空了.使用计时器将是更正确的方式
它不起作用,因为delay()需要发射一些东西,但empty()实际上什么都不发出.
相反,你应该使用Observable.timer().
小智 7
延迟订阅已定义。您的示例可以通过以下方式实现:
getTransactionDetails().delaySubscription(5000, TimeUnit.MILLISECONDS)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30891 次 |
| 最近记录: |