Android使用okhttp封装多文件批量下载 (带进度条,取消下载)
来源:互联网 发布:离线网络驱动 编辑:程序博客网 时间:2024/05/16 11:45
在网上搜索了很多关于okhttp封装的网络框架,唯独没找到完美实现了多个文件批量下载的案例,当前使用的最多的也就是okhttp了,所以,我学习了各位大神的封装后,自己也试着封装了一个关于okhttp的网络请求框架,方便项目中的使用。
实现的功能基本如下:
- post,get请求网络数据
- 多文件的上传(进度监听)
- 多文件下载(批量下载,依次下载,进度监听)
封装的项目结构:
本次封装侧重点在于多文件的依次下载,每一个下载的文件形成一个队列,自定义进度条显示文件下载已完成的个数和下载总任务量,每一个文件的下载都有一个tag,方便取消任务的识别。
(1).get请求数据
OkClient.request(ParamManager.getNewsListParam(2, 3), null, new IResponseCallback() { @Override public void onSuccess(int tag, Object object) { Log.e("wujie", object.toString()); } @Override public void onError(int tag, OkError error) { } });
(2).post请求数据
OkClient.request(ParamManager.getPost(1, 8), null, new IResponseCallback() { @Override public void onSuccess(int tag, Object object) { Log.e("wujie", object.toString()); } @Override public void onError(int tag, OkError error) { } });
(3).文件上传
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()); OkClient.upload(ParamManager.upload(1, file), null, new IResponseCallback() { @Override public void onSuccess(int tag, Object object) { Log.e("wujie", object.toString()); } @Override public void onError(int tag, OkError error) { } });
(4).文件下载
OkClient.download(ParamManager.download(), null, new IResponseCallback() { @Override public void onSuccess(int tag, Object object) { Log.e("wujie", "SUCCESS"); } @Override public void onError(int tag, OkError error) { Log.e("wujie", "onError"); } }, new ProgressListener() { @Override public void onProgress(long bytesWritten, long contentLength, long percent) { Log.e("wujie", percent + "%"); } });
以上是文件post,get请求数据,文件上传,文件下载的调用方式,其实多文件批量下载的实现方式只是在下载文件的过程中更改逻辑即可,下面我就来介绍下多文件批量依次下载的思路。
首先,选中多个下载文件,将文件的下载地址存放在数组中,然后开始使用上述方法下载数组中的第一个文件,同时定义一个全局变量nowfile用于掌控下载文件的个数,当第一个文件下载完成时,该变量增加1,进度条归零,以此类推,当下载全部完成后,下载进度对话框消失。虽然看起来很简单,但是在实现的过程中还是存在很多细节需要注意的。也不是一个简单的事情。
/** * 下载文件 * * @param downloadurls */ public void downloadfile(String downloadurls[]) { OkClient.download(htmltype,ParamManager.download(downloadurls[nowfile]), null, new IResponseCallback() { @Override public void onSuccess(int tag, Object object) { Log.e("wujie", "SUCCESS"); handler.sendEmptyMessage(DOWN_SUCCESS); } @Override public void onError(int tag, OkError error) { Log.i("wujie", "downFailed:异常: " + error); handler.sendEmptyMessage(DOWN_FAILED); } }, new ProgressListener() { @Override public void onProgress(long bytesWritten, long contentLength, long percent) { Log.e("wujie", percent + "%"); Message msg = new Message(); msg.what = DOWN_PROGRESS; msg.arg1 = (int) percent; handler.sendMessage(msg); } }); }
Hander处理方式:
private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case DOWN_START: downDialog.updateView(0, "准备下载"); break; case DOWN_PROGRESS: int progress = msg.arg1; downDialog.updateView(progress, (nowfile + 1) + "/" + totlefile); break; case DOWN_SUCCESS: nowfile = nowfile + 1; if (htmltype == 4) { downloadthumb(); } if (nowfile == totlefile) { Log.i("wujie", "下载全部完成" + nowfile); downDialog.dissmiss(); downthumb = null; downVideoUrls = null; nowfile=0; totlefile=0; } else { downDialog.updateView(100, ""); downDialog.updateView(0, "准备下载"); if (htmltype == 4) { downloadfile(downVideoUrls); }else if(htmltype==3){ downloadfile(downthumb); } } break; case 3: downDialog.updateView(0, "下载异常"); break; } } };
/** * 取消请求 * * @param tag */ public static void cancelRequest(int... tag) { NetManager.getInstance().cancelRequest(tag); }
实现方式大致就是这些,至于怎么封装的okhttp我就不多介绍了,网上资源也很多,如果大家还有什么好的方式实现多文件批量一次下载的,可以跟我交流,大家一起学习学习。
代码传送门
阅读全文
0 0
- Android使用okhttp封装多文件批量下载 (带进度条,取消下载)
- Retrofit(二)、使用Retrofit+OkHttp下载文件并带进度条
- OkHttp下载文件并带进度条
- Android okHttp文件下载并带进度条的demo(简单工具类)
- [Android开发] 使用okhttp下载文件(带监听)
- Android使用okhttp下载图片
- Android 多线程断点下载 Okhttp+AsyncTask 封装下载任务
- android 文件上传与下载(带进度条)
- android 带进度条下载安装apk
- Android带下载进度条的通知栏
- 文件批量下载
- android之OkHttp使用(网络请求,上传,下载)
- Android使用OkHttp框架下载网络图片
- xUtils3带进度条下载(切换界面不会中断下载)
- Android Okhttp 下载管理器
- Android下载OKHTTP
- C# 下载带进度条代码(普通进度条)
- Android好用的okhttp网络封装(get,post,上传,下载)
- 作业
- Hadoop中wordCount功能实现Demo
- 仿ios的滑轮控件,可以自己监听滚动停止的事件
- http请求过程概述及长连接、短连接简述
- String对象不可变
- Android使用okhttp封装多文件批量下载 (带进度条,取消下载)
- vm安装centos7
- Android获取手机联系人匹配用户表并按字母A-Z排序展示
- 实验2.1 顺序表实现成绩管理
- Synonyms-Chinese Synonyms for Natural Language Processing and Understanding
- Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-GVQWxt/ipython/
- reymont/ReadAndLearn
- vue如何给v-for循环的标签添加背景图片
- Android开发工具类集合