rx-java2 - 在android中使用rxjava2时使用重试重新连接
问题描述
我有以下 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 秒重新订阅一次,但事实并非如此!
我已经挣扎了一段时间,对于这个问题的任何帮助将不胜感激。
解决方案
您可以稍微修改您的代码,如下所示:
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 被捕获,它现在会重试吗?
推荐阅读
- javascript - 我想将包含表单 ("input=x") 的 HTML5 页面转换为 PDF 表单
- java - 将多部分主体转换为 java 对象
- python - 计算数据框中的后续元素并将它们存储在新列中
- python - 了解python while循环中2个具有不同结果的相似代码之间的差异
- git - 如何删除未删除的还原提交?
- javascript - html, javascript, if 语句为真时显示按钮。如果不是真的隐藏按钮
- c# - 用于 SVG 内容大小的 C# 库,类似于 Inkscape 信息
- macos - 带有恐慌尾声的文件夹中的新终端
- python - 我想用列表中的双引号替换单引号
- mysql - 在 SET 子句中使用 group by