使用时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 { ... }
Run Code Online (Sandbox Code Playgroud)
我一直以为我是在 被处决的(1),在这种情况下,询问响应是否成功是有意义的。但今天我决定实现这个官方配方来跟踪文件下载的进度。
然后我意识到,如果我删除了行 ( response.body().byteStream()),进度计数器根本不会移动。理论上,我们没有下载任何东西,除非我们下载了,否则success在这种情况下意味着什么。
如果这是一个虚拟问题,我很抱歉,我相信我在这里缺少一些关于网络的非常基本的东西,我想了解更多。我试图理解该Okio库的源代码,但它对我来说有点太复杂,我需要一些参考或指导。
每个 OkHttp 调用有\xe2\x80\x99s 四个步骤:
\n\n当您调用execute()OkHttp 时,执行步骤 1 \xe2\x80\x93 3。进一步的调用会传输响应正文。如果您的响应正文很大,这允许您在响应仍在下载时开始对其进行解码。
| 归档时间: |
|
| 查看次数: |
2351 次 |
| 最近记录: |