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
在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;
}}
推荐阅读
- 即便学会了Markdown,也没想到还可以这么干 —> 学会==提高效率
- 工具类|javabean、xml、json、map之间的相互转换
- Android|【常用工具类】DensityUtils(dp px 互相转换)
- 工具类|阿里巴巴java开发手册-嵩山版 下载
- 切割时间工具
- javaweb|递归和泛型判断多级Map集合中get(key)==null问题