我有以下RxJava一次性应用程序,可在其中收听服务器的实时更新
someNetworkBaseFlowable
.observeOn(schedulerProvider.io())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe({
// handle success
}, {
// handle failure
})
当网络出现故障时,此订阅将失败,即使网络恢复,我也会失去与服务器的连接。
我一直在尝试retryWhen
以便按照以下说明重新订阅服务器
someNetworkBaseFlowable
.observeOn(schedulerProvider.io())
.subscribeOn(AndroidSchedulers.mainThread())
.retryWhen { error ->
error.flatMap {
Flowable.timer(5, TimeUnit.SECONDS)
}
}
.subscribe({
// handle succes
}, {
// handle failure
})
虽然我会尝试ping或重新连接到服务器并每5秒重新订阅一次,但事实并非如此!
我已经苦苦挣扎了一段时间,对此问题的任何帮助将不胜感激。
答案 0 :(得分:0)
您可以对代码进行如下修改:
someNetworkBaseFlowable
.observeOn(schedulerProvider.io())
.subscribeOn(AndroidSchedulers.mainThread())
.retryWhen { errorFlowable : Flowable<Throwable> ->
errorFlowable
.ofType(YourExceptionType::class.java) // for Kotlin
// .ofType(YourExceptionType.class) // for Java
.switchMap{ // to avoid duplicates
Flowable.timer(5L, TimeUnit.SECONDS)
}
}
.subscribe(
{
// handle succes
},
{
// handle failure
})
如果捕获到YourExceptionType,是否立即重试?