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
原创粉丝点击