首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >[ RxJava ]如何在Android RxJava×retrofit2上使用“`retryWhen()”来处理网络错误

[ RxJava ]如何在Android RxJava×retrofit2上使用“`retryWhen()”来处理网络错误
EN

Stack Overflow用户
提问于 2019-11-25 06:55:46
回答 2查看 1.3K关注 0票数 1

我已经尝试过用RxJava进行改装的https请求

当网络不可用时,我想这样处理。1、检查网络状态。2、如果网络可用,请重试请求3,如果网络不可用,则在此之后没有重试->,请侦听网络状态,当网络恢复时,然后重试请求。

我想我们应该使用retryWhen()操作符,但我不知道这么做有多热

需要帮助才能找到好的解决方案

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-25 09:14:00

你应该像你说的那样使用retryWhen操作符。

http://reactivex.io/documentation/operators/retry.html

retryWhen节下的RxKotlin

RetryWhen运算符“重新订阅”当内部可观测到的发出一个项目(可观察的onNext或单个的onSuccess被调用)或只是不重试和通过可抛出的下游当onError调用。

以上是我的措辞,来自医生的确切措辞如下:

retryWhen操作符类似于重试,但通过将Throwable从onError通知传递给生成第二个可观察的函数来决定是否重新订阅和镜像可观察的源,并观察其结果以确定要做什么。如果该结果是已发出的项,retryWhen将重新订阅并镜像源和进程;如果该结果是onError通知,则retryWhen将此通知传递给它的观察者并终止。

假设您有以下改进接口。

代码语言:javascript
运行
复制
interface Api {
  @GET("/api")
  fun request(): Single<String>
}

在retry块中,您将得到一个可流的throwable (它将主要是从您的改造接口抛出的HttpException ),因此您应该在这个可流通性上使用flatMap操作符,因为当网络仍然不可用时,您必须通过可抛出的下游。

代码语言:javascript
运行
复制
ApiClient.instance.request()
  .retryWhen { flowable: Flowable<Throwable> ->
    flowable.flatMap { throwable ->
      // check network status here
      if (available) return@flatMap Flowable.just<Boolean>(true)
      return@flatMap Flowable.error<Boolean>(throwable)
    }
  }
  .subscribe({ response -> /* deal with success */}, { error -> /* deal with error */})

请注意,您必须匹配重试案例和抛出案例的类型(本例中为Flowable<Boolean>)。只要当您想要重试时发出一个项,当您不想重试时发出一个错误,那么使用哪种类型并不重要。

票数 2
EN

Stack Overflow用户

发布于 2019-11-25 07:06:32

使用rxJava和Retrofit处理网络错误非常容易,因为它只是在onError方法中抛出一个RetrofitError:

代码语言:javascript
运行
复制
@Override
public void onError(Throwable e) {
 if (e instanceof RetrofitError) {
    if (((RetrofitError) e).isNetworkError()) {
        //handle network error
    } else {
        //handle error message from server
    }
 }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59026629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档