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