XUtils3.0 框架(工具类)

XUtils 3:

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 
 *<BR/>
 *使用前 在application初始化 x.Ext.init(this);
 *<BR/>
 *x.Ext.setDebug(true);设置是否输出debug<BR/>
 *设置两个权限<BR/>
 * <uses-permission android:name="android.permission.INTERNET" />
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
   <BR/>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) {

            }
        });
    }
    /**
     * 使用数据库
     *  <BR/>Parent test = db.selector(Parent.class).where("id", "in", new int[]{1, 3, 6}).findFirst();
        <BR/>long count = db.selector(Parent.class).where("name", "LIKE", "w%").and("age", ">", 32).count();
        <BR/>List<Parent> 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<Drawable>() {

            @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 <T>
     * @param <object>
     * @param method  请求方式  XUTILS_HTTP_GET  or  XUTILS_HTTP_POST
     * @param path
     * @param map   请求或上传数据(file,string,object), 可以为null
     * @param callback
     */
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public  void LoadHttpUtils(String method,String path,HashMap<String,Object> 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<String> GetStringCommonCallback(final XutilsCallback callback) {
        return new CommonCallback<String>() {

            @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<File> GetFileCommonCallback(final XutilsCallback callback) {
        return new CommonCallback<File>() {

            @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,HashMap<String,Object>map,XutilsCallback callback){
        RequestParams params=new RequestParams(path);
        if(map!=null){
            for(Map.Entry<String, Object> 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<T> 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<StudentInfo> 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:
<LinearLayout xmlns:android="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" >

    <Button
        android:id="@+id/addbitmap"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="下载图片" />
    <Button
        android:id="@+id/httputils"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="http" />
    <Button
        android:id="@+id/dbutils"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="db" />

    <ImageView
        android:id="@+id/xutilsbitmap"
        android:layout_width="match_parent"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_height="150dp" />
    <TextView 
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="200dp"/>

</LinearLayout>
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;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值