java - 如何使 Retrofit 接受每个请求的下载进度回调?

标签 java android retrofit2 okhttp

背景:
我正在尝试将带有进度回调的旧下载代码从 Android 中的 AsyncTask 和 HttpUrlConnection 迁移到使用改造。但是,我注意到 Retrofit/okhttp 默认情况下不提供此类回调。
我做了很多搜索,找到了一些方法,包括官方的solution通过 okhttp,这是由拦截器和自定义 ResponseBody 完成的。然而,它们都没有真正满足我的需求。
我想要什么:
这段代码的问题是回调实际上附加到拦截器,这使得它附加到 okhttp 客户端,而我需要的是为每个请求应用不同回调对象。(不同的android ui元素更改等)
我尝试过的:
据我了解,单个请求由单个改造 Call 接口(interface)实例标记,因此,如果我想实现每个请求回调,则必须将其附加到 Call 实例或 RequestBody 实例。
不幸的是,我没有找到任何方法来获取 okhttp 拦截器内的改造 Call 实例。我也不能将自定义回调对象附加到它。
至于自定义RequestBody的方式,似乎是可行的。但是如果是GET请求,就无法再使用retrofit了,因为无法设置RequestBody。
有什么优雅的方式来实现这一点吗?我所说的“优雅”是指我不喜欢自己以任何形式维护请求 -> 回调映射,如果不非常小心,这甚至可能导致内存泄漏。

最佳答案

您也许可以通过@Tag 和/或调用 找到一些内容。 Tag允许您在 Retrofit 请求中定义一个可在拦截器中使用的参数。 Invocation类似,但不需要额外的参数。

关于java - 如何使 Retrofit 接受每个请求的下载进度回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60548708/

相关文章:

java - 防止当前选择的选择通知 JComboBox 中的监听器

java - Google Cloud SDK 数据存储模拟器 JRE 版本不匹配?

android - 获取AndroidRuntime : FATAL EXCEPTION: DefaultDispatcher-worker-1 with no other stack trace

spring - java.lang.NoSuchMethodError : okio. BufferedSource.rangeEquals(JLokio/ByteString;)Z

android - 为什么服务器将应用程序检测为机器人,而不是 android 版本?

java - Android 通过蓝牙打印

java - 如何使用 Hibernate 4 调用具有多个输出参数的 MS SQL 存储过程?

java - 使用带有 Cookie 持久性的改造

java - 如何添加AppCompatSpinner的提示

java - 使用 android studio 更改 JNI 中的 Byte[] 值