Github地址:
https://github.com/wyouflf/xUtils3/tree/master |
目前xUtils主要有四大模块:
DbUtils模块:
android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
自动加载外键关联实体,支持延时加载;
支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。ViewUtils模块:
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
@SuppressWarnings({ "unchecked", "rawtypes" })
public void 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_GET or XUTILS_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_GET or XUTILS_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();
}
}
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 Button addbitmap;
@ViewInject(R.id.dbutils)
private Button db;
@ViewInject(R.id.httputils)
private Button httputils;
@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=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=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=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);
}
};
}
"http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.mytoolutils.activity.XUtilsActivity" >
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;
}
}