RXJava取消订阅订阅

时间:2018-08-26 11:36:56

标签: rx-java

我有以下现有的示例代码

val disposable = Observable.interval(interval, TimeUnit.SECONDS)
                .take((maxTimeForRequestInSecond / interval).toInt())
                .subscribe {
                    Manager.fetchAvailableSubscriptions(context, params) { status: WebService.Status, response: String? ->
                        if (status == WebService.Status.Success) {
                            // TODO stop the timer and dismiss observable!
                        }
                    }
                }

当满足订阅条件时,如在TODO上一样,如何关闭可观察对象? (我无权访问disposable

注意:使用RxJava 1.1.6

1 个答案:

答案 0 :(得分:2)

您的流有些中断,请将fetchAvailableSubscriptions表示为Observable<ResponseWithStatus>。这样一来,您就无需在回调中进行回调,并且可以更方便地使用运算符takeUntil

来实现

您可以通过将Manager.fetchAvailableSubscriptions包装到Observable.fromCallableObservable.create中来做到这一点

然后您的信息流看起来或多或少

Disposable disposable = Observable.interval(interval, TimeUnit.SECONDS)
                .take((int)(maxTimeForRequestInSecond / interval))
                .flatMap(__ -> fetchAvailableSubscriptionsObservable())
                .takeUntil(responseWithStatus -> status == WebService.Status.Success)
                .subscribe(responseWithStatus -> {
                         // use the response 
                 });