如何使改造接受每个请求的下载进度回调?
How to make retrofit accept a download progress callback for each request?
背景:
我正在尝试将我的旧下载代码从 Android 中的 AsyncTask 和 HttpUrlConnection 的进度回调迁移到使用改造。但是,我注意到 retrofit/okhttp 默认情况下不提供此类回调。
我做了很多搜索,找到了一些方法,包括 okhttp 的官方 solution,这是由拦截器和自定义 ResponseBody 完成的。但是,其中none个确实满足了我的需求。
我想要的:
这段代码的问题是回调实际上附加到拦截器,这使得它附加到 okhttp 客户端,而我需要的是为 应用 different 回调对象每个 请求。(不同android ui 元素更改等)
我尝试过的:
据我了解,单个请求由单个改造 Call 接口实例标记,因此如果我想实现每个请求的回调,它必须附加到 Call 实例或 RequestBody 实例。
不幸的是,我没有找到任何方法在 okhttp 拦截器中获取改造 Call 实例。我也不能将自定义回调对象附加到它。
至于自定义 RequestBody 的方式,似乎是可行的。但是如果是GET请求,就不能再用了,因为retrofit不能设置RequestBody
有什么优雅的方法可以实现吗? "elegant",我的意思是我不想以任何形式自己维护请求 -> 回调映射,如果不非常小心,这甚至可能导致内存泄漏。
您也许可以通过 @Tag
and/or Invocation
找到一些东西。 Tag lets you define a parameter on your Retrofit request that will be available in interceptors. Invocation 类似,但不需要额外的参数。
背景:
我正在尝试将我的旧下载代码从 Android 中的 AsyncTask 和 HttpUrlConnection 的进度回调迁移到使用改造。但是,我注意到 retrofit/okhttp 默认情况下不提供此类回调。
我做了很多搜索,找到了一些方法,包括 okhttp 的官方 solution,这是由拦截器和自定义 ResponseBody 完成的。但是,其中none个确实满足了我的需求。
我想要的:
这段代码的问题是回调实际上附加到拦截器,这使得它附加到 okhttp 客户端,而我需要的是为 应用 different 回调对象每个 请求。(不同android ui 元素更改等)
我尝试过的:
据我了解,单个请求由单个改造 Call 接口实例标记,因此如果我想实现每个请求的回调,它必须附加到 Call 实例或 RequestBody 实例。
不幸的是,我没有找到任何方法在 okhttp 拦截器中获取改造 Call 实例。我也不能将自定义回调对象附加到它。
至于自定义 RequestBody 的方式,似乎是可行的。但是如果是GET请求,就不能再用了,因为retrofit不能设置RequestBody
有什么优雅的方法可以实现吗? "elegant",我的意思是我不想以任何形式自己维护请求 -> 回调映射,如果不非常小心,这甚至可能导致内存泄漏。
您也许可以通过 @Tag
and/or Invocation
找到一些东西。 Tag lets you define a parameter on your Retrofit request that will be available in interceptors. Invocation 类似,但不需要额外的参数。