80,351
社区成员
发帖
与我相关
我的任务
分享
class TestRetryWhenHeartBeatException : Function<Observable<out Throwable>, ObservableSource<*>> {
companion object {
private val DELAY: Long = 6
private val TAG:String = TestRetryWhenHeartBeatException::class.java.simpleName
}
override fun apply(t: Observable<out Throwable>): ObservableSource<*> {
logd(TAG,"retry when")
return t.flatMap { Observable.timer(DELAY, TimeUnit.SECONDS) }
}
}
mHeartBeatDisposable =
Observable.interval(5,TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
// .repeatWhen(RepeatWhenHeartBeatCompleted())
.retryWhen(TestRetryWhenHeartBeatException())
.flatMap {
if (TaskManager.mIdle) {
logd(TAG, "heartbeat")
mNetWorkApi.heartBeat(UrlManager.HEARTBEAT_URL)
} else {
Observable.create { emitter ->
//emit a HttpResult with no data
emitter.onNext(nullHeartBeat)
}
}
}
.subscribe({
logd(TAG, "lost server false")
}, { e ->
loge(TAG, e.message)
loge(TAG, "lost server true")
}, {})
.retryWhen(observable1 -> observable1.flatMap((Func1<Throwable, Observable<?>>) throwable -> {
if (retryCount > 0) {
retryCount--;
return Observable.timer(2000, TimeUnit.MILLISECONDS);
}
return Observable.error((Throwable) throwable);
}))
这是Java 的代码,对比着改吧