您的位置:首页 > 理论基础 > 计算机网络

OkHttp资料推荐 和 下载进度监听开源

2015-10-21 11:39 609 查看
实习了这么久,决定写给自己一个小的总结。

最近导师让我,做网络模块封装,我采用的是okhttp作为底层。

okhttp相关资料:

OkHttp官方介绍 不懂就看官方介绍和相应源代码就可以了。

OkHttp使用介绍 潼哥写的非常容易理解。

Okhttp源码分析 这个帖子我看过还不错,在此推荐。

CoreProgess CoreProgress有上传和下载状态监听,下载时没有考虑实际情况的数值,状态条会出问题,已经在github 给作者提交过fork了。

翻了一遍网络上的资源,发现下载监听的有一个demo,就是CoreProgress,但是下载的部分有Bug,于是之自己写。

因为公司不让上传内部代码,所以说重新写了个小的demo,不能和业务重合,demo有点简陋,只有核心的几行代码,请见谅。

public interface IProgressListener {
void onStart(long contentLength);
void onProgress(long currentLength);
void onSuccess(String filePath);
}
//先定义一个接口

private void downloading(final OkHttpClient client, final Request request, IProgressListener listener) throws IOException {
Response response = client.newCall(request).execute();
//连接网络

InputStream inputStream=null;
int count ;
byte[] bytes =  new byte[BYTESIZE];

if (response.isSuccessful()) {
//如果返回的状态码是成功的 获取inputstream 并且回调传入文件的长度
inputStream = response.body().byteStream();
listener.onStart(response.body().contentLength());
}

//io时 传出 目前读取进度
if (inputStream!=null){
BufferedInputStream bis = new BufferedInputStream(inputStream);
int sumCount =0;
while ((count=bis.read(bytes))!=-1){
sumCount+=count;
listener.onProgress(sumCount);
}
}

/**
* todo 校验文件 是否完整等问题
*/

listener.onSuccess("ok");

}


如果上传的请使用 大神写的 CoreProgess,膜拜过,但在这里有个bug:sink 中获取的byteCount然后传出,这里bytecount 是 byte数组的size 是固定死的,但在io时,每次读出来的count是小于 byte数组的size的 。我也给大神fork过了。

源码

良辰在此有理了,geckhan。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息