XUtils3.0 框架(工具类)

XUtils 3:
Github地址:

https://github.com/wyouflf/xUtils3/tree/master

目前xUtils主要有四大模块:
DbUtils模块:
android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
自动加载外键关联实体,支持延时加载;
支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
ViewUtils模块:
【XUtils3.0 框架(工具类)】android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
HttpUtils模块:
支持同步,异步方式的请求;
支持大文件上传,上传大文件不会oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。
BitmapUtils模块:
加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
支持加载网络图片和本地图片;
内存管理使用lru算法,更好的管理bitmap内存;
可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等…
简单封装的工具类:
import java.io.File; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import org.xutils.DbManager; import org.xutils.DbManager.DbUpgradeListener; import org.xutils.x; import org.xutils.common.Callback.CancelledException; import org.xutils.common.Callback.CommonCallback; import org.xutils.common.util.LogUtil; import org.xutils.http.RequestParams; import org.xutils.image.ImageOptions; import android.graphics.drawable.Drawable; import android.util.TypedValue; import android.widget.ImageView; import android.widget.ImageView.ScaleType; /** *xutils 工具类 基于xutils 3.0 *
*使用前 在application初始化 x.Ext.init(this); *
*x.Ext.setDebug(true); 设置是否输出debug
*设置两个权限
*
xutils文档地址 https://github.com/wyouflf/xUtils3/tree/master */ public class XutilsUtils { private static XutilsUtils instance; private static ImageOptions options; private static DbManager.DaoConfig daoConfig; /** * get请求 */ public static String XUTILS_HTTP_GET="XutilsUtils_LoadHttpUtils_Get"; /** * post请求 */ public static String XUTILS_HTTP_POST="XutilsUtils_LoadHttpUtils_POST"; public static XutilsUtils getInstance(){ if(instance==null){ synchronized (XutilsUtils.class) { if(instance==null){ instance=new XutilsUtils(); } } } return instance; } /** * 数据库初始化 建议在appliation初始化 * @param Dbname数据库名字 * @param DbDirpath 自定义数据库储存位置为null * 则默认存储在/data/data/你的应用程序/database/xxx.db下 * @param Dbversion数据库版本号 */ public void InitializeDB(String Dbname,String DbDirpath,int Dbversion){ daoConfig=new DbManager.DaoConfig() .setDbName(Dbname)//创建数据库的名称 .setDbVersion(Dbversion) ; //数据库版本号 if(DbDirpath!=null){ daoConfig.setDbDir(new File(DbDirpath)); } daoConfig.setDbUpgradeListener(new DbUpgradeListener() {//数据库更新操作public void onUpgrade(DbManager db, int oldVersion, int newVersion) {} }); } /** * 使用数据库 *
Parent test = db.selector(Parent.class).where("id", "in", new int[]{1, 3, 6}).findFirst();
long count = db.selector(Parent.class).where("name", "LIKE", "w%").and("age", ">", 32).count();
List testList = db.selector(Parent.class).where("id", "between", new String[]{"1", "5"}).findAll(); @return DbManager */ public DbManager GetDbManager(){ return x.getDb(daoConfig); } /** * xutils回调接口 */ public interface XutilsCallback{ void Cancel(CancelledException arg0); void Error(Throwable arg0, boolean arg1); void Finish(); void Success(Object arg0); } // 加载本地图片 // x.image().bind(imgv, "assets://test.gif", options); // x.image().bind(iv_big_img, new // File("/sdcard/test.gif").toURI().toString(), imageOptions); // x.image().bind(iv_big_img, "/sdcard/test.gif", imageOptions); // x.image().bind(iv_big_img, "file:///sdcard/test.gif", imageOptions); // x.image().bind(iv_big_img, "file:/sdcard/test.gif", imageOptions); /** * 下载图片添加监听 * @param path * @param imageView * @param loadingimageId * @param errorimageId * @param callback */ @SuppressWarnings({ "rawtypes", "unchecked" }) public void LoadBitmapWithListen(String path,ImageView imageView,int loadingimageId,int errorimageId,final XutilsCallback callback){ if(options==null){ GetImageOptions(loadingimageId, errorimageId); } x.image().bind(imageView, path, options, new CommonCallback() {@Override public void onSuccess(Drawable arg0) { callback.Success(arg0); }@Override public void onFinished() { callback.Finish(); }@Override public void onError(Throwable arg0, boolean arg1) { callback.Error(arg0, arg1); }@Override public void onCancelled(CancelledException arg0) { callback.Cancel(arg0); } }); } /** * 下载图片不添加监听 * @param path * @param imageView */ public void LoadBitmapWithoutListen(String path,int loadingimageId,int errorimageId,ImageView imageView){ if(options==null){ GetImageOptions(loadingimageId, errorimageId); } x.image().bind(imageView, path, options); } /** * 发送get或者post请求 * @param * @param * @param method请求方式XUTILS_HTTP_GETorXUTILS_HTTP_POST * @param path * @param map请求或上传数据(file,string,object), 可以为null * @param callback */ @SuppressWarnings({ "unchecked", "rawtypes" }) publicvoid LoadHttpUtils(String method,String path,HashMap map,final XutilsCallback callback){ RequestParams params=new RequestParams(path); params.setAutoResume(true); //设置断点重新发送 if(map!=null){ Iterator iterator=map.entrySet().iterator(); while(iterator.hasNext()){ Map.Entry entry=(Entry) iterator.next(); if(entry.getValue() instanceof File){ params.addBodyParameter((String) entry.getKey(), (File)entry.getValue()); params.setMultipart(true); }else{ params.addParameter((String) entry.getKey(), entry.getValue()); } } } if(method==null||method.equals(XUTILS_HTTP_GET)){ x.http().get(params,GetStringCommonCallback(callback)); }else if(method.equals(XUTILS_HTTP_POST)){ x.http().post(params,GetStringCommonCallback(callback)); }} private CommonCallback GetStringCommonCallback(final XutilsCallback callback) { return new CommonCallback() {@Override public void onCancelled(CancelledException arg0) { callback.Cancel(arg0); }@Override public void onError(Throwable arg0, boolean arg1) { callback.Error(arg0, arg1); }@Override public void onFinished() { callback.Finish(); }@Override public void onSuccess(String arg0) { callback.Success(arg0); } }; } /** * 下载文件 * @param method请求方式XUTILS_HTTP_GETorXUTILS_HTTP_POST * @param path * @param savefilepath文件保存地址 * @param callback */ @SuppressWarnings({ "unchecked", "rawtypes" }) public void DownloadFile(String method,String path,String savefilepath,XutilsCallback callback){ RequestParams params=new RequestParams(path); params.setAutoResume(true); //设置断点续传 params.setSaveFilePath(savefilepath); if(method==null||method.equals(XUTILS_HTTP_GET)){ x.http().get(params,GetFileCommonCallback(callback)); }else if(method.equals(XUTILS_HTTP_POST)){ x.http().post(params,GetFileCommonCallback(callback)); } } private CommonCallback GetFileCommonCallback(final XutilsCallback callback) { return new CommonCallback() {@Override public void onCancelled(CancelledException arg0) { callback.Cancel(arg0); }@Override public void onError(Throwable arg0, boolean arg1) { callback.Error(arg0, arg1); }@Override public void onFinished() { callback.Finish(); }@Override public void onSuccess(File arg0) { callback.Success(arg0); } }; } /**上传数据 * @param method 请求方式XUTILS_HTTP_GETorXUTILS_HTTP_POST * @param path * @param map * @param callback */ public void UploadFile(String method,String path,HashMapmap,XutilsCallback callback){ RequestParams params=new RequestParams(path); if(map!=null){ for(Map.Entry entry : map.entrySet()){ params.addParameter(entry.getKey(), entry.getValue()); } } if(method==null||method.equals(XUTILS_HTTP_GET)){ x.http().get(params,GetStringCommonCallback(callback)); }else if(method.equals(XUTILS_HTTP_POST)){ x.http().post(params,GetStringCommonCallback(callback)); } } /** * 设置加载图片的参数 * @param loadingimageId * @param errorimageId */ private void GetImageOptions(int loadingimageId, int errorimageId) { // 设置加载图片的参数 options = new ImageOptions.Builder() // 如果ImageView的大小不是定义为wrap_content, 不要crop. //.setCrop(true) // 是否忽略GIF格式的图片 .setIgnoreGif(false) //设置显示圆形图片 //.setCircular(false) //设置半径 //.setRadius(10) // 图片缩放模式 .setImageScaleType(ScaleType.CENTER_CROP) // 下载中显示的图片 .setLoadingDrawableId(loadingimageId) // 下载失败显示的图片 .setFailureDrawableId(errorimageId) // 得到ImageOptions对象 .build(); }}
在application 初始化:
x.Ext.init(this); //xutils 初始化 x.Ext.setDebug(true); //调试XutilsUtils.getInstance().InitializeDB("test_xutils", null, 1); //数据库

例子:
import java.util.List; import org.xutils.DbManager; import org.xutils.x; import org.xutils.common.Callback.CancelledException; import org.xutils.common.Callback.CommonCallback; import org.xutils.common.util.LogUtil; import org.xutils.ex.DbException; import org.xutils.view.annotation.ContentView; import org.xutils.view.annotation.Event; import org.xutils.view.annotation.ViewInject; import com.example.mytoolutils.R; import com.example.mytoolutils.R.drawable; import com.example.mytoolutils.R.id; import com.example.mytoolutils.R.layout; import com.example.mytoolutils.R.string; import com.example.mytoolutils.db.StudentInfo; import com.example.mytoolutils.utils.framework.XutilsUtils; import com.example.mytoolutils.utils.framework.XutilsUtils.XutilsCallback; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; //viewUtils加载Activity布局,使用了这句之后oncreate里面不需要调用setcontentView @ContentView(R.layout.activity_xutils) public class XUtilsActivity extends Activity { @ViewInject(R.id.xutilsbitmap)//注入view private ImageView xutilsbitmap; @ViewInject(R.id.addbitmap) private Buttonaddbitmap; @ViewInject(R.id.dbutils) private Buttondb; @ViewInject(R.id.httputils) private Buttonhttputils; @ViewInject(R.id.text) private TextView text; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); x.view().inject(this); } /** * 使用BitmapUtils显示图片 * * 使用ViewUtils设置按钮的点击事件,方法必须要私有化, * 参数格式和type的参数一致,为了混淆方便,方法名要以Event或者Click结尾 * type可以不写,默认是点击事件类型 */ @Event(value=https://www.it610.com/article/R.id.addbitmap,type=View.OnClickListener.class ) private void addClick(View view){ XutilsUtils.getInstance().LoadBitmapWithoutListen ("http://img.yxbao.com/news_img/201306/28/1372405532_3.gif", R.drawable.ic_add, R.drawable.fail_image,xutilsbitmap); } @Event(value=https://www.it610.com/article/R.id.httputils,type=View.OnClickListener.class ) private void showhttpEvent(View view){ XutilsUtils.getInstance().LoadHttpUtils(XutilsUtils.XUTILS_HTTP_GET,"http://apis.juhe.cn/idcard/index?key=edba852bfcd4df7fed16946650bb8076&cardno=421087199304280010",null,callback); } @Event(value=https://www.it610.com/article/R.id.dbutils,type=View.OnClickListener.class ) private void dbutilsEvent(View view){ DbManager dbManager=XutilsUtils.getInstance().GetDbManager(); //写入数据 StudentInfo studentInfo=new StudentInfo(); studentInfo.setAge(23); studentInfo.setName("Hello word"); studentInfo.setId(2); try { dbManager.saveOrUpdate(studentInfo); } catch (DbException e) { e.printStackTrace(); }//获取数据 try { List liststudentinfo=dbManager.selector(StudentInfo.class).findAll(); for(StudentInfo info:liststudentinfo){ LogUtil.i("dbutils:"+info.getAge()); } } catch (DbException e) { e.printStackTrace(); } } XutilsCallback callback=new XutilsCallback() { @Override public void Success(Object object) { if(object instanceof String){ text.setText(object+""); } LogUtil.i("XUtilsActivity_XUtilsCallback_Success:"+object); }@Override public void Finish() { LogUtil.i("XUtilsActivity_XUtilsCallback_Finished"); }@Override public void Error(Throwable throwable, boolean b) { LogUtil.i("XUtilsActivity_XUtilsCallback_Error:"+throwable+","+b); }@Override public void Cancel(CancelledException object) { LogUtil.i("XUtilsActivity_XUtilsCallback_cancel:"+object); } }; }

R.layout.activity_xutils:

StudentInfo.class:
import org.xutils.db.annotation.Column; import org.xutils.db.annotation.Table; @Table(name = "info") public class StudentInfo { @Column(name = "id", isId = true) private int id; @Column(name = "name") private String name; @Column(name = "age") private int age; public int getId() { return id; }public void setId(int id) { this.id = id; }public String getName() { return name; }public void setName(String name) { this.name = name; }public int getAge() { return age; }public void setAge(int age) { this.age = age; }}

    推荐阅读