我有以下现有的示例代码
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
答案 0 :(得分:2)
您的流有些中断,请将fetchAvailableSubscriptions
表示为Observable<ResponseWithStatus>
。这样一来,您就无需在回调中进行回调,并且可以更方便地使用运算符takeUntil
您可以通过将Manager.fetchAvailableSubscriptions
包装到Observable.fromCallable
或Observable.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
});