通过在改造中透明地发送另一个请求来处理特定错误

这是我正在尝试处理的情况,

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

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

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

也许与这个关于ResponseInterceptor的公开问题相关的东西?

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

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

由于我使用的是RoboSpice,我最终通过创建一个抽象的BaseRequestListener来实现这BaseRequestListener

 public abstract class BaseRequestListener implements RequestListener { @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); }