android – 实现重试时的逻辑

前端之家收集整理的这篇文章主要介绍了android – 实现重试时的逻辑前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个应用程序,需要会话(cookie)来处理网络电话.我正在使用Retrofit Rx Java.但是,会话可能会过期(使用401 Unauthorized状态进行Retrofit错误)并且我想重新进行身份验证(以获取新的cookie)并在此情况下重试之前的呼叫.我如何用RxJava做到这一点?

我的例子:

getServerApi().getDialogs(offset,getCookies())
     .subscribeOn(Schedulers.newThread())
     .observeOn(AndroidSchedulers.mainThread())
     .retryWhen(observable -> {...}) // Need some logic
     .subscribe(dialogsEnvelope -> getView().setDialogs(dialogsEnvelope),throwable -> getView().setError(processFail(throwable)));

解决方法

使用OkHttp非常强大的 Interceptor.
public class RecoverInterceptor implements Interceptor {
  String getAuth() {
    // check if we have auth,if not,authorize
    return "Bearer ...";
  }

  void clearAuth() {
    // clear everything
  }

  @Override public Response intercept(Chain chain) throws IOException {
    final Request request = chain.request();
    if (request.urlString().startsWith("MY ENDPOINT")) {
      final Request signed = request.newBuilder()
          .header("Authorization",getAuth())
          .build();
      final Response response = chain.proceed(signed);
      if (response.code() == 401) {
        clearAuth();
        return intercept(chain);
      } else {
        return response;
      }
    } else {
      return chain.proceed(request);
    }
  }
}

请记住同步您的身份验证进程代码,以便两个并发请求不会同时调用它.

原文链接:https://www.f2er.com/android/316817.html

猜你在找的Android相关文章