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

2023-12-26

这是我正在尝试处理的案例,

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

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

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

也许与此开放相关issue https://github.com/square/retrofit/issues/261关于响应拦截器?

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

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


由于我使用的是 RoboSpice,因此我最终通过创建一个摘要来完成此操作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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Android EditText 和 addTextChangedListener

    我目前正在将数据库管理器移植到 Android 由于性能原因 我喜欢 仅更新已修改的属性 我尝试使用 addTextChangedListener 执行此操作 以便将修改后的条目添加到列表中 但我的程序从未输入其任何方法 EditText
  • Android TelecomManager 中的 addIncomingCall 没有执行任何操作

    我正在尝试使用本机 Android 来电 UI 我有一个连接服务 并且我已经成功注册了一个电话帐户 但在我调用方法 addNewIncomingCall 后什么也没有发生 对我所缺少的有什么想法吗 显现
  • 如何访问 Android 心率传感器原始数据? (反射光,不是心跳)

    心率传感器上的 android sdk 仅返回计算出的 bpm 我对此不感兴趣 我需要访问 Android 心率传感器原始数据 例如就反射值的强度而言将会很大 因为心率传感器基本上使用 LED 并测量随时间变化的反射率 如果可能 访问由任何
  • 如何制作像 Google+ 应用程序中那样的气泡? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 有谁知道如何使用 Google An
  • 当我单击“完成”键时,Android OnEditorActionListener() actionId 给出 0

    我创建了一个键盘 当用户输入数字时 它会输入特定的 EditText 但是当用户单击Done关键 它没有去setOnEditorActionListener但它关闭了键盘 这是我的代码 final EditText txtQty new E
  • 4 天后,应用仍未在 Google Play 搜索中编入索引

    我已经在 4 天前在 google play 上发布了我的第一个应用程序 语音到短信 但我仍然无法通过其名称或开发人员名称在搜索中找到我的应用程序 我只能通过包名称或真实应用程序名称 但不带空格 找到我的应用程序 VoiceToSMS 链接
  • 如何在Android中的DataBinding的ViewModel类中获取R.string

    我目前正在使用databinding对于我的 Android 应用程序项目 我想设置error留言在我的CustomTextView from R string txtOldPassWordError并从另一个名为的类中进行设置ViewMo
  • 在 NFC 标签扫描期间,onNewIntent() 内的intent.getAction() 为 null

    这是我第一次使用 NFC 标签 我在清单中声明了 NFC 扫描活动
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • Android:WebView/BaseInputConnection 中的退格键

    我在 Android 4 2 中遇到软键盘退格问题 我在 WebView CodeMirror 中有一个自定义编辑器 它使用一个空的
  • 如何在Android模拟器中隐藏应用程序图标?

    我有一个应用程序在启动完成后自动启动 但应用程序图标显示在android模拟器中 现在我想向用户隐藏该图标 这样用户就无法知道应用程序已启动 并且他们无法启动该应用程序手动申请 在您的 AndroidManifest xml 文件中 您可能
  • Android Google Map V2:如何在单击另一个标记时更改先前单击的标记的图标

    更新 我通过添加 previousMarker 对象解决了性能问题 因此 只有先前单击的标记将被删除并替换为默认图标 但是 当我单击标记时 信息窗口仍然不显示 我有一个地图视图并在上面设置了一些标记 我想要的是 当我单击一个标记时 它将其图
  • Android 的 Intent 和 Parcelable 对象

    为什么我需要打包我的对象 即使我只需将其发送到同一任务的另一个线程 实际上 我需要打开一个甚至可以在同一线程 主线程 上运行的活动 换句话说 为什么 Google 不提供一个 startActivity 版本 它采用通用对象广告参数而不是捆
  • 以 HTML 格式发送电子邮件

    我想发送 HTML 格式的电子邮件 如下图所示 我怎样才能做到这一点 请帮我 提前致谢 String body new String table tr td br header td tr br br Get b Best Score b
  • TextView.setMaxLines 不起作用?

    在我的应用程序中 我有一个屏幕 其中显示一些文本 然后显示一张照片 文本的长度是可变的 有时根本没有 有时很多 所以我想对其进行设置 以便文本永远不会占用超过几行 但可以滚动 为下面的图像留下足够的空间 我这部分的视图组件是以编程方式创建的
  • 如何知道我的应用程序的活动计数?

    我的应用程序中有多项活动 请考虑以下案例 Activity A 调用 Activity B B 调用 C 当用户按后退键时 C 生成通知并转到 B 现在再次按后退 因此将显示 A 再次按后退键也会终止 A 并显示通知 现在 当用户按下通知图
  • 通过 Gradle 和 Android Studio 构建和运行应用程序比通过 Eclipse 慢

    我有一个多项目 10 个模块 每次构建大约需要 20 30 秒 当我在 Android Studio 中按 运行 时 每次都必须等待才能重建应用程序 这非常慢 是否可以在 Android Studio 中自动化构建过程 或者您对如何加快此过
  • TabLayout 的不同 tabMode

    我正在使用 ViewPager 和 TabLayout 如果选项卡可以放置在显示 tabMode 上 则它们必须是 app tabMode fixed else app tabMode scrollable 我怎样才能做到这一点 我不明白你
  • 在数组列表中过滤 Filterable 不取消之前的过滤

    我看过过滤器方法文档 其中显示调用过滤器会取消所有先前未执行的过滤请求 并发布一个稍后将执行的新过滤请求 但我收到的实际回调有些不同 在我的实现中 它不会取消先前的过滤器请求并调用publishResults 最近一次搜索条件后的上一次搜索
  • 我想测量 ListView 的高度 (getHight() = 0)

    我无法自己决定任务将是问 我想测量 ListView 的高度 无法捕捉渲染 ListView 的时刻 rssListView getHight 0 public class RSSactivity extends Activity publ

随机推荐

  • 日期时间值不正确:“2012-07-14 23:00:00”

    我在使用 Python MySQL 处理日期时间格式时遇到一些问题 我使用以下脚本 由 Python 字典提供 计算日期时间 tempDate str eachday get date get year zfill 4 str eachda
  • #include 导致很多语法错误

    我的程序使用 Qt 和 OpenGL 它在 Linux 和 Mac 下都能正确编译 在Windows上编译时 我需要 include windows h才能使用OpenGL 代码如下 if defined WIN32 defined WIN
  • 不能需要全局 npm 模块

    我有以下问题 我安装 uuidnpm install g uuid 当我尝试运行以下代码时 var uuid require uuid console log uuid v1 抛出异常 module js 339 throw err Err
  • std::vector 和 C 风格数组

    我正在尝试OpenCL http www khronos org opencl 提高我们软件的速度 我们经常使用映射 为了简化 将映射表示为 std vector OpenCL API 采用原始 C 风格指针作为参数 例如上述情况中的 in
  • 如何设置PowerShell的默认目录?

    有没有办法更改 PowerShell 默认位置 如何设置PowerShell的默认工作目录 创建一个PowerShell 简介 https learn microsoft com en us powershell module micros
  • com.microsoft.sqlserver.jdbc.SQLServerException:MSI 令牌失败:无法从 MSI 端点获取令牌

    我想使用应用服务 API Java 和 MSI 托管服务身份 身份验证来访问 Azure SQL 数据库 我试图找出如何从适用于 Java 的 Azure 应用服务将 Azure sql 与 MSI 连接 这是我正在使用的连接字符串 jdb
  • 脚本脚本需要刷新页面才能运行吗?

    该脚本有助于在线商店的结帐过程 除了需要刷新页面以使程序最初运行之外 一切正常 我想知道这是否是缓存问题 因为它适用于以前查看过的其他产品 我也尝试修补 run at无济于事 我正在使用脚本式的扩展 它是一个独立的 js file User
  • 如何在 Node.js 中渲染 EJS 模板文件?

    我正在使用 Node js 并尝试呈现 EJS 模板文件 我弄清楚了如何渲染字符串 var http require http var ejs require ejs var server http createServer functio
  • 如何查看jOOQ执行的SQL语句?

    我使用 jOOQ 从表中查询 插入 更新数据 有没有办法查看JOOQ执行的SQL语句 查找您的日志配置文件 或创建一个 并设置该类的日志级别org jooq tools LoggerListener as debug or trace 例如
  • 在 netty 通道上设置套接字超时

    我有一个 netty 通道 我想在底层套接字上设置超时 默认设置为 0 超时的目的是 如果 15 分钟内没有发生任何事情 则未使用的通道将被关闭 虽然我没有看到任何配置可以这样做 而且套接字本身也对我隐藏 Thanks 如果使用ReadTi
  • 带命名空间的 xpath

    我正在尝试在 php SimpleXML 中使用 xpath 和 xml 文件 其中以下是相关片段
  • 在推出自己的结构时提供辅助函数

    如果我正在开发一个 C 共享库并且我有自己的结构 为了使库使用者更容易对这些结构实例进行常见操作 我可以在结构本身内部提供指向此类函数的函数指针吗 这是一个好的做法吗 使用不同参数并行调用实用函数等多线程处理是否会出现问题 我知道它更接近
  • IntelliJ 错误:发生 JNI 错误,请检查您的安装并重试

    我正在尝试在 intellij 中运行一个项目 每次运行特定的类时 我都会收到以下错误消息 Error A JNI error has occurred please check your installation and try agai
  • 缓冲文件中的一组行并将其存储在 C 中的数组中

    这可能是一种非常低效的方法 但它确实有效 此代码读取一个文件 一次在全局数组中存储 8 行文本 如果可能的话 希望有更好的选择来执行此操作 并分派以进行进一步处理 这是代码 int count 0 global char array buf
  • Flutter 设置状态 onPressed on RaisingButton

    我正在构建一个测验应用程序 它会在用户提交他们选择的答案后显示正确答案的解释 布局上有两个按钮 下一个问题 和 提交答案 在初始状态下 下一个问题 按钮很微妙 因为它不可点击 只有 提交答案 按钮可点击 点击这里查看初始状态的布局 http
  • 最小起订量测试无效方法

    您好 我是起订量测试的新手 很难做一个简单的断言 我正在使用一个界面 public interface IAdd void add int a int b 最小起订量IAdd接口是 Mock
  • 如何在 Rust 中使用以 f64 作为键的 HashMap?

    我想用一个HashMap
  • Elixir - 将浮点数转换为字符串

    我试图弄清楚如何将浮点转换为字符串 二进制 但似乎并不像看起来那么容易 iex 1 gt to string 1200 00 1 2e3 iex 2 gt Float to string 1200 00 1 2e3 我们需要 1200 00
  • androidcamera2将TotalCaptureResult与Frame关联起来

    这是关于 Android 的 Camera2 API 的 由于捕获结果和输出帧是异步产生的 因此可以在实际帧之前获得捕获结果 有没有好的方法将生成的帧与相应的捕获结果相关联 假设您正在谈论发送到的帧ImageReader or Surfac
  • 通过在改造中透明地发送另一个请求来处理特定错误

    这是我正在尝试处理的案例 如果执行请求 并且响应指示身份验证令牌已过期 发送刷新令牌请求 如果刷新令牌请求成功 则重试原始请求 这对于调用 Activity Fragment 等应该是透明的 从调用者的角度来看 这是一个请求 一个响应 我之