推迟改造重试

时间:2019-03-04 12:58:12

标签: android callback retrofit2

我的应用程序中存在以下情形:

  1. 我向需要有效令牌的端点发出了http请求(Rq);我最终遇到401错误;
  2. 根据有关各种S.O问题的建议,我使用Authenticator类实现了令牌刷新。
  3. 事情在我们的后端,目前为止还没有用于刷新端点的端点,只有在用户再次登录后才提供此“新鲜”令牌。
  4. 因此,一旦我检测到401错误,便会检索本地存储的登录信息(例如在“共享”偏好设置中),向端点发出登录请求
  5. 如果请求成功,我将获得一个新令牌并正常处理失败的请求(Rq)。
  6. 但是,如果登录在一段时间后失败(例如,因为从SP读取的数据不正确...),则想法是向用户显示登录UI。用户填写登录表单,然后尝试再次登录。
  7. 如果登录成功,我想恢复失败的请求(Rq)。 最好的方法是什么?

注意::我们到处都有回调...所以现在没有RxJava或Kotlin了:)

1 个答案:

答案 0 :(得分:0)

使用Rx2和Retrofit组合,则可以轻松实现它,它看起来像:

service.login(username, password)
            .retry(RETRY_FETCH_COUNT)
            .onErrorResumeNext {
                return@onErrorResumeNext doSomethingElse()
            }
            .observeOn(uiScheduler)
            .subscribe({ loginResponse ->
               handleLogin(loginResponse)
            }, {
                onLoginError()
            })