美文网首页面试需要使用
2018-06-14 OkHttp 下载文件 傻瓜式

2018-06-14 OkHttp 下载文件 傻瓜式

作者: 寝室有人 | 来源:发表于2018-06-13 16:57 被阅读31次

使用前先依赖 Okhttp:

  compile 'com.squareup.okhttp3:okhttp:3.6.0'

工具类

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 saveDir 储存下载文件的SDCard目录 * @param listener 下载监听 */ public void download(final String url, final String saveDir, 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(); } @Override public void onResponse(Call call, Response response) throws IOException { InputStream is = null; byte[] buf = new byte[2048]; int len = 0; FileOutputStream fos = null; // 储存下载文件的目录 String savePath = isExistDir(saveDir); try { is = response.body().byteStream(); long total = response.body().contentLength(); File file = new File(savePath, getNameFromUrl(url)); 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(); } catch (Exception e) { listener.onDownloadFailed(); } finally { try { if (is != null) is.close(); } catch (IOException e) { } try { if (fos != null) fos.close(); } catch (IOException e) { } } } }); } /** * @param saveDir * @return * @throws IOException * 判断下载目录是否存在 */ private String isExistDir(String saveDir) throws IOException { // 下载位置 File downloadFile = new File(Environment.getExternalStorageDirectory(), saveDir); if (!downloadFile.mkdirs()) { downloadFile.createNewFile(); } String savePath = downloadFile.getAbsolutePath(); return savePath; } /** * @param url * @return * 从下载连接中解析出文件名 */ @NonNull private String getNameFromUrl(String url) { return url.substring(url.lastIndexOf("/") + 1); } public interface OnDownloadListener { /** * 下载成功 */ void onDownloadSuccess(); /** * @param progress * 下载进度 */ void onDownloading(int progress); /** * 下载失败 */ void onDownloadFailed(); }} 

在点击事件做

DownloadUtil.get().download(url,"download",newDownloadUtil.OnDownloadListener() {@OverridepublicvoidonDownloadSuccess(){ Utils.showToast(MainActivity.this,"下载完成"); }@OverridepublicvoidonDownloading(intprogress){ progressBar.setProgress(progress); }@OverridepublicvoidonDownloadFailed(){ Utils.showToast(MainActivity.this,"下载失败"); }});

相关文章

  • 2018-06-14 OkHttp 下载文件 傻瓜式

    使用前先依赖 Okhttp: compile 'com.squareup.okhttp3:okhttp:3.6....

  • 文件下载

    1.OkHttp下载文件 2.Retrofit下载 3.HttpUrlConnection下载 4.saveFile

  • Mac上安装配置Go语言+Sublime

    1. 下载安装文件 到github或者官网下载Go语言的 .pkg文件 2. 安装过程 下载后进行傻瓜式安装 3....

  • Android关于Okhttp那些事

    前言: 前面介绍了基于Okhttp的get、post基本使用,今天来实现以下基于okhttp的文件上传、下载。关于...

  • OkHttp3详解

    一、OkHttp的封装 (1)创建JSON回调 (2)创建下载文件回调 (3)网络请求封装 OkHttp3源码详解

  • Workflow实例全集

    请下载workflow后访问此文章。 攻略帖 【Workflow规则】带壳截图,无需下载任何外壳文件,傻瓜式一键使...

  • android okhttp下载文件

  • Android OkHttp + Retrofit 断点续传

    本文链接 前面我们已经知道如何使用OkHttp+Retrofit下载文件。下载文件时,可能会遇到一些意外情况,比如...

  • FastHttpClient

    简单易用的httpclient 封装OkHttp3,对外提供了POST请求、GET请求、上传文件、下载文件、htt...

  • OkHttp3简单封装

    简单封装了OkHttp3的请求方法,包含:GET、POST、上传文件、下载文件。项目地址:https://gith...

网友评论

    本文标题:2018-06-14 OkHttp 下载文件 傻瓜式

    本文链接:https://www.haomeiwen.com/subject/vizjeftx.html