当第一个失败并返回401 Unauthorized时,请重做先前的请求

Bra*_*non 5 java android android-networking retrofit

我正在构建一个Android应用程序,该应用程序将从REST API中获取数据。

为了发出请求,我将RetrofitOtto一起使用。

对于我的所有请求,我添加一个RequestInterceptor,它将为我的所有请求添加标头(授权)。在RequestInterceptor中,我正在对当前的access_token调用一个方法,然后将标头填充到请求中。

RequestInterceptor requestInterceptor = new RequestInterceptor() {

    @Override
    public void intercept(RequestFacade request) {
        Token token = TokenPreferences.getToken();

        request.addHeader("Authorization", token.getTokenType() + " " + token.getAccessToken());
    }
};

RestAdapter restAdapter = new RestAdapter.Builder()
      .setEndpoint("https://example.com")
      .setRequestInterceptor(requestInterceptor)
      .build();

  ...
Run Code Online (Sandbox Code Playgroud)

在access_token过期之前,此方法可以正常工作,然后请求将失败,且HTTP状态为401 Unauthorized。发生这种情况时,我想发出一个新请求以从我得到的refresh_token中获取一个新的access_token,然后再次执行第一个请求。

我不太确定如何进行这项工作。

Yur*_*aev 0

Retrofit 中未实现重试机制。它将出现在 v2 中。(手动重试请求

您应该按照Deepack 的建议,通过 onFailure() 回调的递归调用来实现重试。