尝试使用 Retrofit @Streaming 注释下载大文件时出现 OutOfMemoryError
Posted
技术标签:
【中文标题】尝试使用 Retrofit @Streaming 注释下载大文件时出现 OutOfMemoryError【英文标题】:OutOfMemoryError while trying to download large file using Retrofit @Streaming annotation 【发布时间】:2019-12-20 21:58:15 【问题描述】:我正在使用改造客户端下载文件,但是当有大文件(200 MB)时,它会抛出java.lang.OutOfMemoryError:
我也有@Streaming
注释,这是我的下载服务方法
@Streaming
@GET("path")
suspend fun downloadFile(@Path("path") path: String): Response<ResponseBody>`
这里是调用代码sn-p
suspend fun downloadFile(remotePath: String): FileDownloadResponse
try
val response = api.downloadFile(remotePath)
if (response.isSuccessful)
FileDownloadResponse.Success(response.body()!!)
else
FileDownloadResponse.Fail()
catch (e: Exception)
e.printStakTrace()
FileDownloadResponse.Fail(throwable = e)
val response = remoteRepositroy.downloadFile(remotePath)
val writeResult = response.body.writeResponseBodyToDisk()
改装版 = 2.6.0
协程版本 = 1.3.0-M1
【问题讨论】:
【参考方案1】:我已通过将 HttpLogingInterceptor
日志级别从 BODY
更改为 HEADERS
来修复它
HttpLoggingInterceptor().apply
level = HttpLoggingInterceptor.Level.HEADERS
)
看起来很奇怪的错误修复,但它确实有效
【讨论】:
【参考方案2】:尝试使用下载管理器下载大文件
您可以通过@CommonsWare 在这里找到完整的示例
https://github.com/commonsguy/cw-android/tree/master/Internet/Download
【讨论】:
以上是关于尝试使用 Retrofit @Streaming 注释下载大文件时出现 OutOfMemoryError的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试使用 Retrofit 访问 MailChimp 的 API 时,API 密钥总是丢失
Android:使用 Retrofit 获取不同的对象列表数据
Retrofit + Kotlin + MVVM 的网络请求框架的封装尝试