6

这是我要处理的情况,

  • 如果执行了请求,并且响应表明身份验证令牌已过期,
  • 发送刷新令牌请求
  • 如果刷新令牌请求成功,则重试原始请求

这对调用的Activity、Fragment...等应该是透明的。从调用者的角度来看,这是一个请求,一个响应。

我之前在直接使用 OkHttpClient 时已经实现了这个流程,但是我不知道如何在 Retrofit 中实现这一点。

也许与这个关于 ResponseInterceptor 的公开问题有关?

如果在改造中没有直接的方法来实现这一点,那么实现它的最佳方法是什么?基础监听器类?

我也在使用带有 Retrofit 的 RoboSpice,如果它在这种情况下有用的话。

4

1 回答 1

2

由于我使用的是 RoboSpice,因此我最终通过创建一个 abstract 来做到这一点BaseRequestListener

public abstract class BaseRequestListener<T> implements RequestListener<T> {

    @Override
    public void onRequestFailure(SpiceException spiceException) {
        if (spiceException.getCause() instanceof RetrofitError) {
            RetrofitError error = (RetrofitError) spiceException.getCause();
            if (!error.isNetworkError() 
                && (error.getResponse().getStatus() == INVALID_ACCESS_TOKEN_STATUS_CODE)) {
                //I'm using EventBus to broadcast this event,
                //this eliminates need for a Context
                EventBus.getDefault().post(new Events.OnTokenExpiredEvent());
                //You may wish to forward this error to your listeners as well,
                //but I don't need that, so I'm returning here.
                return;
                }
         }
         onRequestError(spiceException);
    }

    public abstract void onRequestError(SpiceException spiceException);
}
于 2014-04-08T10:52:36.657 回答