首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >okhttp - execute() vs body().byteStream

okhttp - execute() vs body().byteStream
EN

Stack Overflow用户
提问于 2017-08-10 18:22:46
回答 1查看 1.8K关注 0票数 0

使用OkHttp时,网络请求在12中执行,代码如下:

代码语言:javascript
复制
            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库的源代码,但它对我来说太复杂了,我需要一些参考或指导。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-10 22:53:23

每个OkHttp调用有四个步骤:

  1. 编写请求标头
  2. 流请求体(如果存在的话)。
  3. 读取响应头
  4. 流响应体

当您调用execute()时,OkHttp执行步骤1-3,进一步调用流的响应体。如果响应体很大,则允许您在响应仍在下载时开始解码响应。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45620960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档