使用OkHttp时,网络请求在1或2中执行,代码如下:
val response = client.newCall(request).execute() // (1)
if (response.isSuccessful) {
val bs = response.body().byteStream() // (2)
val bitmap = BitmapFactory.decodeStream(bs)
} else { ... }我一直以为我是在(1)中执行的,在这种情况下,询问响应是否成功是有意义的。但是今天我决定实现这个正式的食谱来跟踪正在下载的文件的进度。
然后我意识到,如果我删除行(response.body().byteStream()),进度计数器根本不会移动。理论上,我们没有下载任何东西,只是我们下载了,或者success在这个场景中意味着什么。
我很抱歉,如果这是一个愚蠢的问题,我相信在这里我缺少一些关于人际关系的非常基本的东西,我想了解更多。我试图理解Okio库的源代码,但它对我来说太复杂了,我需要一些参考或指导。
发布于 2017-08-10 22:53:23
每个OkHttp调用有四个步骤:
当您调用execute()时,OkHttp执行步骤1-3,进一步调用流的响应体。如果响应体很大,则允许您在响应仍在下载时开始解码响应。
https://stackoverflow.com/questions/45620960
复制相似问题