Android okHttp文件下载并带进度条的demo(简单工具类)
来源:互联网 发布:阿里云邮电脑客户端 编辑:程序博客网 时间:2024/05/19 23:28
根据okHttp简单的封装了一个根据url下载文件并更新进度的工具类,在此记录下,以后要使用可以进行参考
先来看看效果图:
接下来看看具体的代码实现
首先在:app中添加项目对于Okhttp的依赖:
//okhttpcompile 'com.squareup.okhttp3:okhttp:3.3.1'
新建Java文件DownloadUtil.java
package com.demo.test;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import okhttp3.Call;import okhttp3.Callback;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;/** * 文件下载工具类(单例模式) * Created on 2017/10/16. */public class DownloadUtil { private static DownloadUtil downloadUtil; private final OkHttpClient okHttpClient; public static DownloadUtil get() { if (downloadUtil == null) { downloadUtil = new DownloadUtil(); } return downloadUtil; } private DownloadUtil() { okHttpClient = new OkHttpClient(); } /** * @param url 下载连接 * @param destFileDir 下载的文件储存目录 * @param destFileName 下载文件名称 * @param listener 下载监听 */ public void download(final String url, final String destFileDir, final String destFileName, final OnDownloadListener listener) { Request request = new Request.Builder().url(url).build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { // 下载失败监听回调 listener.onDownloadFailed(e); } @Override public void onResponse(Call call, Response response) throws IOException { InputStream is = null; byte[] buf = new byte[2048]; int len = 0; FileOutputStream fos = null; // 储存下载文件的目录 File dir = new File(destFileDir); if (!dir.exists()) { dir.mkdirs(); } File file = new File(dir, destFileName); try { is = response.body().byteStream(); long total = response.body().contentLength(); fos = new FileOutputStream(file); long sum = 0; while ((len = is.read(buf)) != -1) { fos.write(buf, 0, len); sum += len; int progress = (int) (sum * 1.0f / total * 100); // 下载中更新进度条 listener.onDownloading(progress); } fos.flush(); // 下载完成 listener.onDownloadSuccess(file); } catch (Exception e) { listener.onDownloadFailed(e); } finally { try { if (is != null) is.close(); } catch (IOException e) { } try { if (fos != null) fos.close(); } catch (IOException e) { } } } }); } public interface OnDownloadListener { /** * @param file 下载成功后的文件 */ void onDownloadSuccess(File file); /** * @param progress 下载进度 */ void onDownloading(int progress); /** * @param e 下载异常信息 */ void onDownloadFailed(Exception e); }}
使用方法
/** * 文件下载 * * @param url */ public void downFile(String url) { progressDialog = new ProgressDialog(SplashActivity.this); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setTitle("正在下载"); progressDialog.setMessage("请稍后..."); progressDialog.setProgress(0); progressDialog.setMax(100); progressDialog.show(); progressDialog.setCancelable(false); DownloadUtil.get().download(url, Environment.getExternalStorageDirectory().getAbsolutePath(), "kuoke.apk", new DownloadUtil.OnDownloadListener() { @Override public void onDownloadSuccess(File file) { if (progressDialog != null && progressDialog.isShowing()) { progressDialog.dismiss(); } //下载完成进行相关逻辑操作 } @Override public void onDownloading(int progress) { progressDialog.setProgress(progress); } @Override public void onDownloadFailed(Exception e) { //下载异常进行相关提示操作 } }); }简单的工具封装,仅供参考,大神多多指教,一起进步
阅读全文
0 0
- Android okHttp文件下载并带进度条的demo(简单工具类)
- OkHttp下载文件并带进度条
- Retrofit(二)、使用Retrofit+OkHttp下载文件并带进度条
- 【android】带加载进度条的WebView (附demo下载)
- Android使用okhttp封装多文件批量下载 (带进度条,取消下载)
- android 文件上传与下载(带进度条)
- 第一步:写一个带进度条的下载文件的小Demo
- Android 下载文件并显示进度条
- 基于AsyncTask的带进度条的下载功能Demo实现
- winform带进度条的文件下载
- Android带下载进度条的通知栏
- [Android开发] 使用okhttp下载文件(带监听)
- HttpWebRequest下载文件带进度条
- android实现带进度条的文件上传
- android上面的OkHttp的简单get和post demo
- 下载文件并更新进度条
- Android之一个简单的进度条工具类
- 超简单的okhttp封装工具类(上)
- 朴素贝叶斯解决天气问题
- 统计一个字符串中数字的个数
- JSTAT分析
- java集合框架简单比较
- 加密文章见cnblog
- Android okHttp文件下载并带进度条的demo(简单工具类)
- NIO之ByteBuffer
- 在屏幕上打印杨辉三角
- 顺序栈和链栈的实现(实验3.1)
- VBA Excel
- 讲故事,学(Java)设计模式—桥接模式
- [LeetCode]412. Fizz Buzz
- 获取字符串中最长的连续数字字符串或最长的非数字字符串
- 实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定, 输入9,输出9 * 9口诀表,输出12,输出12 * 12的乘法口诀表。