Rx:如何取消通话?

时间:2019-03-27 09:07:23

标签: android rx-java

例如,我们有一个电话:

getObsevable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(::onSuccess, ::onError))

如果条件为真,是否可以不启动它?例如:

getObsevable()
.stop({ Calendar.getInstance().get(Calendar.MINUTE) % 2 == 0 })
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(::onSuccess, ::onError))

在这段代码中,我的意思是如果当前分钟是奇数,则我们不应启动可观察的。如果当前分钟是偶数,请启动它。

2 个答案:

答案 0 :(得分:1)

是的,您可以使用filter来实现。因此,使用过滤器时会发生什么,如果不满足条件,则不会执行下面的流。

在您的情况下(或示例),如果当前分钟是奇数,则不会调用subscribe方法。但是,即使是偶数,流也将按照其编写的方式工作。

getObservable()
    .filter({ Calendar.getInstance().get(Calendar.MINUTE) % 2 == 0 })
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(::onSuccess, ::onError))

您可以在这里阅读-> http://reactivex.io/documentation/operators/filter.html

答案 1 :(得分:0)

将其分配给一次性设备,并在开始另一个呼叫之前或需要处置的地方进行处置

Disposable disposable;


public void createDisposableWithMyObservable(){
    if(disposable != null) disposable.dispose();

    disposable = getObsevable()
                   .stop({ Calendar.getInstance().get(Calendar.MINUTE) % 2 == 0 })
                   .subscribeOn(Schedulers.io())
                   .observeOn(AndroidSchedulers.mainThread())
                   .subscribe(::onSuccess, ::onError));
}