项目场景:
在复现《第一行代码》里的第十章服务的示例的时候遇到的bug
问题描述
1.记得添加okhttp依赖,当时我的最新的(这里新版添加依赖都要用implementation不然会报错)
// define a BOM and its version
implementation(platform("com.squareup.okhttp3:okhttp-bom:4.9.3"))
// define any required OkHttp artifacts without version
implementation("com.squareup.okhttp3:okhttp")
implementation("com.squareup.okhttp3:logging-interceptor")
2.实现进度条显示下载进度的时候要编写getContentLength方法来计算目前的进度的时候,获取到的contentLength是-1的情况。
原因分析:
可能是你返回的请求头中没有contentLength这个字段。
解决方案:
有三种解决方案
1.发现能显示的请求头里有Content-Length而不能显示长度的请求头里有没有content-type且多了Transfer-Encoding:chunked,在chuncked模式下是没有Content-Length的。
在Header中加入:Request.Builder().addHeader(“Accept-Encoding”, “identity”)这样强迫服务器不走压缩,问题就得到了解决。
2.修改服务端,设置一个contentLength
3.修改一个下载地址
我发现有些下载的链接是有给ContentLength的有些是没有的。
参考资料: