Xutils框架
来源:互联网 发布:淘宝商品id 编辑:程序博客网 时间:2024/05/18 01:46
Xutils是一款非常优秀的开源框架,现在我的项目都是在这个框架上再次封装开发项目的。
使用必须申请两个权限:
<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Xutils 一共四个模块 : ViewUtils、HttpUtils、DbUtils、BitmapUtil
详细内容:https://github.com/wyouflf/xUtils
我看有个download模块没有在Github上提到,在这我说一下我的理解:
Demo中提供了三个类:DownloadInfo,DownloadService,DownloadManage
第一个类:DownloadInfo.class
是每一个下载对象的信息,其中记录了文件保存路径和文件下载进度等信息,当然这是用数据库存储下来的。
第二个类:DownloadService.class
看名字就知道,这是一个后台Service,所有的下载任务都在这里面,所以不用担心页面销毁,下载进度问题。
第三个类:DownloadManage.class
这是下载管理类,下载操作都在这里面,还有下载进度。
package com.example.appstoredemo.down;import java.io.File;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.database.Cursor;import com.lidroid.xutils.DbUtils;import com.lidroid.xutils.HttpUtils;import com.lidroid.xutils.db.converter.ColumnConverter;import com.lidroid.xutils.db.converter.ColumnConverterFactory;import com.lidroid.xutils.db.sqlite.ColumnDbType;import com.lidroid.xutils.db.sqlite.Selector;import com.lidroid.xutils.exception.DbException;import com.lidroid.xutils.exception.HttpException;import com.lidroid.xutils.http.HttpHandler;import com.lidroid.xutils.http.ResponseInfo;import com.lidroid.xutils.http.callback.RequestCallBack;import com.lidroid.xutils.util.LogUtils;/** * Author: wyouflf Date: 13-11-10 Time: 下午8:10 */public class DownloadManager { private List<DownloadInfo> downloadInfoList; private int maxDownloadThread = 3; private Context mContext; private DbUtils db; /* package 每次new一个对象都会从数据库中读取一遍 */DownloadManager(Context appContext) { ColumnConverterFactory.registerColumnConverter(HttpHandler.State.class, new HttpHandlerStateConverter()); mContext = appContext; db = DbUtils.create(mContext); try { downloadInfoList = db.findAll(Selector.from(DownloadInfo.class)); } catch (DbException e) { LogUtils.e(e.getMessage(), e); } if (downloadInfoList == null) { downloadInfoList = new ArrayList<DownloadInfo>(); } } public int getDownloadInfoListCount() { return downloadInfoList.size(); } public DownloadInfo getDownloadInfo(int index) { return downloadInfoList.get(index); } public DownloadInfo getDownloadInfoByDB(String downloadUrl) throws DbException { DownloadInfo downloadInfo = db.findFirst(Selector.from(DownloadInfo.class).where("downloadUrl", "=", downloadUrl)); return downloadInfo; } public DownloadInfo getDownloadInfoByList(String downloadUrl) { for (int i = 0; i < downloadInfoList.size(); i++) { if (downloadUrl.equals(downloadInfoList.get(i).getDownloadUrl())) { return downloadInfoList.get(i); } } return null; } //添加一个新的下载任务 public void addNewDownload(String url, String fileName, String target, boolean autoResume, boolean autoRename, String pkg, String icon, String appId, final RequestCallBack<File> callback) throws DbException { final DownloadInfo downloadInfo = new DownloadInfo(); downloadInfo.setDownloadUrl(url); downloadInfo.setAutoRename(autoRename); downloadInfo.setAutoResume(autoResume); downloadInfo.setFileName(fileName); downloadInfo.setFileSavePath(target); downloadInfo.setPkg(pkg); downloadInfo.setIcon(icon); downloadInfo.setAppId(appId); HttpUtils http = new HttpUtils(); http.configRequestThreadPoolSize(maxDownloadThread); HttpHandler<File> handler = http.download(url, target, autoResume, autoRename, new ManagerCallBack(downloadInfo, callback)); downloadInfo.setHandler(handler); downloadInfo.setState(handler.getState()); downloadInfoList.add(downloadInfo); db.saveBindingId(downloadInfo); } public void resumeDownload(int index, final RequestCallBack<File> callback) throws DbException { final DownloadInfo downloadInfo = downloadInfoList.get(index); resumeDownload(downloadInfo, callback); } public void resumeDownload(DownloadInfo downloadInfo, final RequestCallBack<File> callback) throws DbException { HttpUtils http = new HttpUtils(); http.configRequestThreadPoolSize(maxDownloadThread); HttpHandler<File> handler = http.download(downloadInfo.getDownloadUrl(), downloadInfo.getFileSavePath(), downloadInfo.isAutoResume(), downloadInfo.isAutoRename(), new ManagerCallBack(downloadInfo, callback)); downloadInfo.setHandler(handler); downloadInfo.setState(handler.getState()); db.saveOrUpdate(downloadInfo); } public void removeDownload(int index) throws DbException { DownloadInfo downloadInfo = downloadInfoList.get(index); removeDownload(downloadInfo); } public void removeDownload(DownloadInfo downloadInfo) throws DbException { HttpHandler<File> handler = downloadInfo.getHandler(); if (handler != null && !handler.isCancelled()) { handler.cancel(); } downloadInfoList.remove(downloadInfo); db.delete(downloadInfo); } public void stopDownload(int index) throws DbException { DownloadInfo downloadInfo = downloadInfoList.get(index); stopDownload(downloadInfo); } public void stopDownload(DownloadInfo downloadInfo) throws DbException { HttpHandler<File> handler = downloadInfo.getHandler(); if (handler != null && !handler.isCancelled()) { handler.cancel(); } else { downloadInfo.setState(HttpHandler.State.CANCELLED); } db.saveOrUpdate(downloadInfo); } public void stopAllDownload() throws DbException { for (DownloadInfo downloadInfo : downloadInfoList) { HttpHandler<File> handler = downloadInfo.getHandler(); if (handler != null && !handler.isCancelled()) { handler.cancel(); } else { downloadInfo.setState(HttpHandler.State.CANCELLED); } } db.saveOrUpdateAll(downloadInfoList); } public void backupDownloadInfoList() throws DbException { for (DownloadInfo downloadInfo : downloadInfoList) { HttpHandler<File> handler = downloadInfo.getHandler(); if (handler != null) { downloadInfo.setState(handler.getState()); } } db.saveOrUpdateAll(downloadInfoList); } public int getMaxDownloadThread() { return maxDownloadThread; } public void setMaxDownloadThread(int maxDownloadThread) { this.maxDownloadThread = maxDownloadThread; } //下载进度监听 public class ManagerCallBack extends RequestCallBack<File> { private DownloadInfo downloadInfo; private RequestCallBack<File> baseCallBack; public RequestCallBack<File> getBaseCallBack() { return baseCallBack; } public void setBaseCallBack(RequestCallBack<File> baseCallBack) { this.baseCallBack = baseCallBack; } private ManagerCallBack(DownloadInfo downloadInfo, RequestCallBack<File> baseCallBack) { this.baseCallBack = baseCallBack; this.downloadInfo = downloadInfo; } //取得保存的对象,在ListView中会用的到 @Override public Object getUserTag() { if (baseCallBack == null) return null; return baseCallBack.getUserTag(); } //保存一个对象 @Override public void setUserTag(Object userTag) { if (baseCallBack == null) return; baseCallBack.setUserTag(userTag); } @Override public void onStart() { HttpHandler<File> handler = downloadInfo.getHandler(); if (handler != null) { downloadInfo.setState(handler.getState()); } try { db.saveOrUpdate(downloadInfo); } catch (DbException e) { LogUtils.e(e.getMessage(), e); } if (baseCallBack != null) { baseCallBack.onStart(); } } @Override public void onCancelled() { HttpHandler<File> handler = downloadInfo.getHandler(); if (handler != null) { downloadInfo.setState(handler.getState()); } try { db.saveOrUpdate(downloadInfo); } catch (DbException e) { LogUtils.e(e.getMessage(), e); } if (baseCallBack != null) { baseCallBack.onCancelled(); } } @Override public void onLoading(long total, long current, boolean isUploading) { HttpHandler<File> handler = downloadInfo.getHandler(); if (handler != null) { downloadInfo.setState(handler.getState()); } downloadInfo.setFileLength(total); downloadInfo.setProgress(current); try { db.saveOrUpdate(downloadInfo); } catch (DbException e) { LogUtils.e(e.getMessage(), e); } if (baseCallBack != null) { baseCallBack.onLoading(total, current, isUploading); } } @Override public void onSuccess(ResponseInfo<File> responseInfo) { HttpHandler<File> handler = downloadInfo.getHandler(); if (handler != null) { downloadInfo.setState(handler.getState()); } try { db.saveOrUpdate(downloadInfo); } catch (DbException e) { LogUtils.e(e.getMessage(), e); } if (baseCallBack != null) { baseCallBack.onSuccess(responseInfo); } } @Override public void onFailure(HttpException error, String msg) { HttpHandler<File> handler = downloadInfo.getHandler(); if (handler != null) { downloadInfo.setState(handler.getState()); } try { db.saveOrUpdate(downloadInfo); } catch (DbException e) { LogUtils.e(e.getMessage(), e); } if (baseCallBack != null) { baseCallBack.onFailure(error, msg); } } } private class HttpHandlerStateConverter implements ColumnConverter<HttpHandler.State> { @Override public HttpHandler.State getFieldValue(Cursor cursor, int index) { return HttpHandler.State.valueOf(cursor.getInt(index)); } @Override public HttpHandler.State getFieldValue(String fieldStringValue) { if (fieldStringValue == null) return null; return HttpHandler.State.valueOf(fieldStringValue); } @Override public Object fieldValue2ColumnValue(HttpHandler.State fieldValue) { return fieldValue.value(); } @Override public ColumnDbType getColumnDbType() { return ColumnDbType.INTEGER; } }}
0 0
- xUtils框架
- xUtils框架
- xUtils框架
- xUtils框架
- Xutils框架
- Xutils框架
- Xutils 框架
- xUtils框架
- xUtils框架
- xUtils框架
- xUtils框架
- xUtils框架
- xUtils框架
- xUtils框架
- xUtils框架
- xUtils 框架
- xUtils框架
- xUtils框架
- java设计模式学习之观察者模式(二)
- Unity5.1 新的网络引擎UNET(十五) Networking 引用--下
- Apache Thrift设计概要
- 黑马程序员--基础整理02
- Android apk AndroidManifest.xml 解密
- Xutils框架
- 编程中最没用的东西是源代码,最有用的东西是算法和数据结构。
- php实现排序算法(一) 冒泡排序 快速排序
- gdb调试工具的使用
- axure RP
- Shader toy (顺手写两个Gyro)(纯代码写3D)
- PlayerPrefs学习
- 自己写的串口缓冲区
- Axure入门设计——模糊设计(步骤)