您现在的位置是:主页 > news > 成都网站建设龙兵/武汉seo优化顾问
成都网站建设龙兵/武汉seo优化顾问
admin2025/6/30 1:10:45【news】
简介成都网站建设龙兵,武汉seo优化顾问,淘宝上做网站 源代码怎么给你,wordpress调用大全DownloadUtil 单例模式:主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。 记得…
成都网站建设龙兵,武汉seo优化顾问,淘宝上做网站 源代码怎么给你,wordpress调用大全DownloadUtil
单例模式:主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。
记得…
DownloadUtil
单例模式:主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。
记得在子线程中开启。在ui线程中处理数据
/*** Created by wanglingsheng on 2018/5/29.* 文件下载工具类(单例模式)*/public class DownloadUtil {private static DownloadUtil downloadUtil;private final OkHttpClient okHttpClient;public static DownloadUtil get() {if (downloadUtil == null) {downloadUtil = new DownloadUtil();}return downloadUtil;}public 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 client = new OkHttpClient();try {Response response = client.newCall(request).execute();} catch (IOException e) {e.printStackTrace();}//异步请求okHttpClient.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {// 下载失败监听回调listener.onDownloadFailed(e);}@Overridepublic 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();}if (fos != null) {fos.close();}} catch (IOException e) {}}}});}public interface OnDownloadListener{/*** 下载成功之后的文件*/void onDownloadSuccess(File file);/*** 下载进度*/void onDownloading(int progress);/*** 下载异常信息*/void onDownloadFailed(Exception e);}
}
使用:
/*** 文件下载*/private void downFile(String url) {DownloadUtil.get().download(url, Environment.getExternalStorageDirectory().getAbsolutePath(), "dtwb2.apk",new DownloadUtil.OnDownloadListener() {@Overridepublic void onDownloadSuccess(File file) {if (progressDialog != null && progressDialog.isShowing()) {progressDialog.dismiss();}//下载完成进行相关逻辑操作Message msg = mHandler.obtainMessage();msg.what = 0;mHandler.sendMessage(msg);}@Overridepublic void onDownloading(int progress) {
// progressDialog.setProgress(progress);Message msg = mHandler.obtainMessage();msg.what = 11;msg.obj = progress;mHandler.sendMessage(msg);}@Overridepublic void onDownloadFailed(Exception e) {//下载异常进行相关提示操作Message msg = mHandler.obtainMessage();msg.what = 1;msg.obj = e;mHandler.sendMessage(msg);}});}
progressDialog的配置:
progressDialog = new ProgressDialog(DownloadActivity.this);progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);progressDialog.setCancelable(false);progressDialog.setCanceledOnTouchOutside(false);progressDialog.setTitle("正在下载");progressDialog.setMessage("请稍后...");progressDialog.setMax(100);progressDialog.show();
setProgress的更新用过handler处理message,切换到主线程中更新UI