Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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);
    }
  }
}

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

大佬总结

以上是大佬教程为你收集整理的android – 实现重试时的逻辑全部内容,希望文章能够帮你解决android – 实现重试时的逻辑所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。