关于okhttp下载文件的一点发现
来源:互联网 发布:网络女主播闪现 编辑:程序博客网 时间:2024/05/17 06:25
上一个项目用的是retrofit做的网络请求,所以自然升级时候下载apk时候,也是用的retrofit。但是这个项目是接手了别人写了一部分的项目,所以网络请求就沿用了之前的okhttp了。但是再用它下载文件apk时候发现了一点问题,不知道是自己用的不对,还是怎么了,但是还是通过一些方法解决了。
遇到的问题就是如何判断下载结束了。在原来用retrofit和Rxjava时候,下载apk会定义一个接口大多如下:
@Streaming
@GET
Observable<ResponseBody> downloadApk(@Url String url);,然后呢,在使用时候,我们一般会subscribe一个Observer(这里默认读者熟悉retrofit和Rxjava,哈哈),通过这个Observer的四个方法onError()知道现在下载过程中出现异常,同样可以通过onComplete()知道下载完毕了,这些都没有问题了。但是在只是使用okhttp时候如何得知下载完毕呢?
当然下载我们都会通过给okhttp添加拦截器知道其下载进度,所以刚开始是通过当下载进度大于等于下载文件的长度时候,就认为其下载完毕了,很多时候都没问题,但是有时候会出现下载完毕解析包异常的问题,这就说明通过下载进度判断是不靠谱的,apk还没下载完毕,但是进度已经满足了上述的条件了。然后我就想,既然这样不好使,那就通过文件读写完毕来判断吧,都是在okhttp执行时候的回调callback的onResponse方法里面进行文件的写入的,所以我就在这里判断,如果文件写入完毕,就认为文件下载完毕,然后开始安装,但是有时候依然是会存在包解析失败的情况,看来这样子也不行了,归根结底都是文件并没有真正的下载完毕,却开始安装了。所以我就试着当同时满足这两个条件时候开始安装,即下载进度大于等于文件长度且文件写入执行完毕时候。这样子果然没出现过解析失败的情况了。不过还是比较奇怪,单纯的通过进度或者文件读写为何不能判断文件已经下载完毕了。
- 关于okhttp下载文件的一点发现
- 使用IAR+Jlink开发STM32关于下载Flash的一点发现
- 关于DataGrid 和DataSet的一点发现
- 关于Google文档的一点小发现~
- 关于.net 中 Mysettings 的一点发现
- 关于CPU时间片轮询的一点发现
- [StoryToolKit]关于Activity的一点发现
- 关于object.innerHTML的一点发现
- 关于xml自定义形状的一点发现
- 关于窗体控件的一点小发现
- 关于ARP欺骗的一点发现
- 关于UIScrollView的一点小发现
- Android关于图标形状的一点发现
- 关于android的2.2与4.4的文件读取的一点发现
- OkHttp大文件下载
- OkHttp 下载文件实现
- OkHttp下载文件
- 关于jquery的ajax的一点小发现
- 简单的RelativeLayout 相对布局 及其常用属性
- 设置Edittext 输入带有小数点类型的输入规则
- App奔溃日志收集
- ASP.NET网站管理工具的【安全】功能无法使用问题
- 015 Python语法之文件结束
- 关于okhttp下载文件的一点发现
- 可以与ScrollView共存的ListView
- JavaScript DOM(三)-DOM事件
- 【学习小记】狄利克雷卷积+杜教筛
- CSS选择器
- [ZJOI2008]瞭望塔
- java运算符及表达式
- java 组合与继承2
- Android布局常用属性