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

哈桑·易卜拉欣

这是我要处理的情况

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

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

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

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

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

我也将RoboSpice与Retrofit一起使用,如果在这种情况下可能会有所帮助。

哈桑·易卜拉欣

由于我使用的是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);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么以前访问的网站中的图像在另一个网站上透明地呈现?

来自分类Dev

在Android中的Canvas上透明地绘制/“融合”图像到另一个图像

来自分类Dev

使用 rxJava 和改造多次调用另一个请求中的请求

来自分类Dev

有条件地重定向到另一个页面,并通过PHP中的POST发送参数

来自分类Dev

从发送请求到另一个php的php中检索用户在html中输入的特定数据

来自分类Dev

如何截取生成器的第一个值并透明地从其余值中屈服

来自分类Dev

当地图中有另一个请求时,RxJs 处理错误

来自分类Dev

用另一个函数替换WndProc来处理消息?

来自分类Dev

如何使用 Guzzle 向 Laravel 中的另一个控制器发送请求

来自分类Dev

我可以创建一个透明地呈现方法和变量的类吗?

来自分类Dev

一个状态属性,只要其值更改,它就会透明地调用setState

来自分类Dev

通过另一个屏幕会话处理屏幕

来自分类Dev

通过curl将服务器上的发帖请求发送到另一个

来自分类Dev

发送一个提交之后另一个提交的拉取请求

来自分类Dev

通过分组的特定属性从列表中删除另一个列表中的项目

来自分类Dev

一个文件而不是另一个文件中的输出出现“已发送标题”错误

来自分类Dev

可以观察到通过改造来处理网络错误

来自分类Dev

通过Scala中的另一个Seq更新Seq的特定索引

来自分类Dev

如何通过另一个活动在数据库中显示特定行?

来自分类Dev

在Django中请求另一个用户对象

来自分类Dev

在另一个功能中请求功能响应

来自分类Dev

如何通过停止特定属性在另一个按钮中调用一个按钮单击事件

来自分类Dev

通过另一个文本文件中的值更新一个文件的特定值

来自分类Dev

从Android中的另一个线程进行改造和领域访问

来自分类Dev

在另一个类中初始化改造类

来自分类Dev

codeigniter-在控制器中使用模型结果来处理另一个模型查询

来自分类Dev

除了 Etag 之外,我还应该有另一个系统来处理并发吗?

来自分类Dev

等待一个请求完成,然后在 angularjs 中执行另一个请求

来自分类Dev

处理另一个活动中的对象

Related 相关文章

  1. 1

    为什么以前访问的网站中的图像在另一个网站上透明地呈现?

  2. 2

    在Android中的Canvas上透明地绘制/“融合”图像到另一个图像

  3. 3

    使用 rxJava 和改造多次调用另一个请求中的请求

  4. 4

    有条件地重定向到另一个页面,并通过PHP中的POST发送参数

  5. 5

    从发送请求到另一个php的php中检索用户在html中输入的特定数据

  6. 6

    如何截取生成器的第一个值并透明地从其余值中屈服

  7. 7

    当地图中有另一个请求时,RxJs 处理错误

  8. 8

    用另一个函数替换WndProc来处理消息?

  9. 9

    如何使用 Guzzle 向 Laravel 中的另一个控制器发送请求

  10. 10

    我可以创建一个透明地呈现方法和变量的类吗?

  11. 11

    一个状态属性,只要其值更改,它就会透明地调用setState

  12. 12

    通过另一个屏幕会话处理屏幕

  13. 13

    通过curl将服务器上的发帖请求发送到另一个

  14. 14

    发送一个提交之后另一个提交的拉取请求

  15. 15

    通过分组的特定属性从列表中删除另一个列表中的项目

  16. 16

    一个文件而不是另一个文件中的输出出现“已发送标题”错误

  17. 17

    可以观察到通过改造来处理网络错误

  18. 18

    通过Scala中的另一个Seq更新Seq的特定索引

  19. 19

    如何通过另一个活动在数据库中显示特定行?

  20. 20

    在Django中请求另一个用户对象

  21. 21

    在另一个功能中请求功能响应

  22. 22

    如何通过停止特定属性在另一个按钮中调用一个按钮单击事件

  23. 23

    通过另一个文本文件中的值更新一个文件的特定值

  24. 24

    从Android中的另一个线程进行改造和领域访问

  25. 25

    在另一个类中初始化改造类

  26. 26

    codeigniter-在控制器中使用模型结果来处理另一个模型查询

  27. 27

    除了 Etag 之外,我还应该有另一个系统来处理并发吗?

  28. 28

    等待一个请求完成,然后在 angularjs 中执行另一个请求

  29. 29

    处理另一个活动中的对象

热门标签

归档