OKHttp附件下载实现,进度监听
2016-02-24 14:32
423 查看
1.创建请求request
Request request = new Request.Builder().url(url).build();
2.获取response,由于是耗时操作,所以需要异步获取
new Thread(new Runnable() { @Override public void run() { ... try { Response response = okHttpClient.newCall(request).execute(); if (!response.isSuccessful() || response == null || response.body() == null) { sendMessage(1, 0, 0, ""); } else { //处理response ... } } catch (IOException e) { e.printStackTrace(); sendMessage(1, 0, 0, ""); } } }).start();
3.处理获取的response,并进行进度监听
InputStream is = null; byte[] buf = new byte[2048]; int len = 0; FileOutputStream fos = null; try { is = response.body().byteStream(); int last = 0; final long total = response.body().contentLength(); long sum = 0; fos = new FileOutputStream(new File(apkPath)); while ((len = is.read(buf)) != -1) { sum += len; fos.write(buf, 0, len); int now = (int) (sum * 100 / total); if (last < now) { LogUtils.d("current:" + last + ";total:" + 100); sendMessage(3, last, 100, ""); last = now; } } fos.flush(); sendMessage(2, 0, 0, ""); } catch (IOException e) { e.printStackTrace(); sendMessage(1, 0, 0, ""); } finally { try { if (is != null) { is.close(); } } catch (IOException e) { e.printStackTrace(); } try { if (fos != null) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } }
4.通知主线程进行相应的处理
public void sendMessage(int what, long current, long total, String msg) { Message message = Message.obtain(); message.what = what; message.arg1 = (int) current; message.arg2 = (int) total; message.obj = msg; handler.sendMessage(message); } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 1: //下载失败 ... break; case 2: //下载成功 ... break; case 3: //下载进度 int current = msg.arg1; int total = msg.arg2; ... break; } } };
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories