XUtils 3 框架 介绍

来源:互联网 发布:狄山 知乎 编辑:程序博客网 时间:2024/04/28 13:21

随着XUtils3(以下简称”X3”)的发布,修复了众多Bug、代码重构以及Android5.0版本以上的兼容等,
X3虽然不是说最好最火,但也得到了相当一部分人的喜爱。看到了GitHub上的X3功能介绍和sample
里面的代码,对于经常使用框架的人来说是比较容易理解和快速投入使用的,但对于一些新手来说就
很头疼了,这里就简单的介绍下X3的基本用法,在文章最后有XUtils3的jar包。注:部分代码引入的
github上的X3中sample内代码
转载请注明出处:http://blog.csdn.net/wx_anonymity/article/details/50930109

//注意:在使用XUtils3框架时,记得自定义一个myApplication类继承Application,覆写onCreate方法    // 在application的onCreate中初始化,否则运行时会提示没有合适的权限    @Override    public void onCreate() {        super.onCreate();        x.Ext.init(this);        x.Ext.setDebug(true); // 是否输出debug日志    }    //进入正题//异步加载网络图片,在自定义Adapter内写入如下代码import org.xutils.x;public class XUtils3ImageAdapter extends BaseAdapter {    private List<String> lists;    private LayoutInflater inflater;    private Context context;    private ImageOptions imageOptions;    public XUtils3ImageAdapter(List<String> lists, Context context) {        this.lists = lists;        this.context = context;        inflater = LayoutInflater.from(this.context);    }    @Override    public int getCount() {        // TODO Auto-generated method stub        return lists.size();    }    @Override    public Object getItem(int position) {        // TODO Auto-generated method stub        return lists.get(position);    }    @Override    public long getItemId(int position) {        // TODO Auto-generated method stub        return position;    }    @Override     public View getView(int position, View convertView, ViewGroup parent) {        // TODO Auto-generated method stub        ViewHolder vh = null;        if (convertView == null) {            vh = new ViewHolder();            convertView = inflater.inflate(R.layout.item_lv, null);            vh.imageView = (ImageView) convertView.findViewById(R.id.test_iv);            imageOptions = new ImageOptions.Builder()                    // 设置图片尺寸                    .setSize(DensityUtil.dip2px(300), DensityUtil.dip2px(300))                    // 设置圆角(图片以矩形展示,设置四角的弧度)                    .setRadius(DensityUtil.dip2px(15))                    // 如果ImageView的大小不是定义为wrap_content, 不要crop.                    .setCrop(true)                    // 很多时候设置了合适的scaleType也不需要它.                    // 加载中或错误图片的ScaleType                    // .setPlaceholderScaleType(ImageView.ScaleType.MATRIX)                    .setImageScaleType(ImageView.ScaleType.CENTER_CROP)                    .setLoadingDrawableId(R.drawable.ic_launcher)                    .setFailureDrawableId(R.drawable.ic_launcher).build();            convertView.setTag(vh);        } else {            vh = (ViewHolder) convertView.getTag();        }        x.image().bind(vh.imageView, lists.get(position), imageOptions);        return convertView;    }    //自定义Adapter的内部类,ViewHolder,这个没什么好说的了,地球人都知道    class ViewHolder {        ImageView imageView;    }//之后在主界面MainActivity onCreate方法内写入List<String> lists_goodsImage = new ArrayList<String>();        lists_goodsImage.add("http://pic54.nipic.com/file/20141204/19902974_135858226000_2.jpg");        lists_goodsImage.add("http://pic54.nipic.com/file/20141204/19902974_135858226000_2.jpg");        lists_goodsImage.add("http://pic54.nipic.com/file/20141204/19902974_135858226000_2.jpg");

之后写一个给ListView,然后设置上述,也就是你自定义的Adapter就可以了,布局文件就一个LinearLayout里面放一个listview,然后再写一个布局文件作为item
网络请求

//这个真的是再简单不过了,直接上代码吧    //直接调用这个方法就可以了private void testHttp(String username, String password,String url) {        // TODO Auto-generated method stub        RequestParams params = new RequestParams(url);        params.addBodyParameter("username", username);        params.addBodyParameter("password", password);        x.http().get(params, new CommonCallback<String>() {            @Override            public void onCancelled(CancelledException arg0) {                // TODO Auto-generated method stub            }            @Override            public void onError(Throwable arg0, boolean arg1) {                // TODO Auto-generated method stub            }            @Override            public void onFinished() {                // TODO Auto-generated method stub            }            @Override            public void onSuccess(String arg0) {                // TODO Auto-generated method stub                String result_data = arg0;                Log.i("get_data", result_data);            }        });    }

数据库CURD

//首先,配置DaoConfigDbManager.DaoConfig daoConfig = new DbManager.DaoConfig()                .setDbName("test.db")                // 不设置dbDir时, 默认存储在app的私有目录.                // .setDbDir(new File("/sdcard")) // "sdcard"的写法并非最佳实践, 这里为了简单,                // 先这样写了.                .setDbVersion(2)                .setDbOpenListener(new DbManager.DbOpenListener() {                    @Override                    public void onDbOpened(DbManager db) {                        // 开启WAL, 对写入加速提升巨大                        db.getDatabase().enableWriteAheadLogging();                    }                }).setDbUpgradeListener(new DbManager.DbUpgradeListener() {                    @Override                    public void onUpgrade(DbManager db, int oldVersion,                            int newVersion) {                        // 此为更新数据库版本时可以做的操作,这里暂不介绍                        // db.addColumn(...);                        // db.dropTable(...);                        // ...                        // or                        // db.dropDb();                    }                });        //之后得到DBManger        DbManager db = x.getDb(daoConfig);        List<DBTest> parentList = new ArrayList<DBTest>();        try {         //增         for (int i = 0; i < 5; i++) {         //自定义bean类             DBTest parent = new DBTest();             parent.setAdmin(true);             parent.setDate(new java.sql.Date(1234));             parent.setTime(new Date());             parent.setEmail(i + "_@qq.com");             parentList.add(parent);             db.save(parent);         }            //查            DBTest db_temp = db.selector(DBTest.class)                    .where("email", "=", "lololo").limit(4000).findFirst();            //删             db.delete(DBTest.class, WhereBuilder.b("email", "=", "lololo"));            //改             WhereBuilder wb = WhereBuilder.b("email", "=", "169_@qq.com");             KeyValue kv = new KeyValue("email", "lololo");             db.update(DBTest.class,wb,kv);            } catch (DbException e) {            // TODO Auto-generated catch block                e.printStackTrace();        } //功能代码实现了之后,再创建一个JavaBean类来get、set属性值,这里的注解用的是X3, //就不一一讲述了,详细的可以自己试一下import org.xutils.db.annotation.Column;import org.xutils.db.annotation.Table;//这句注解是创建数据库的表的语句@Table(name = "parent", onCreated = "CREATE UNIQUE INDEX index_name ON parent(name,email)")public class DBTest {@Column(isId = true, name = "id")    private int id;    @Column(name = "name")    public String name;    @Column(name = "email")    private String email;    @Column(name = "isAdmin")    private boolean isAdmin;    @Column(name = "time")    private Date time;    @Column(name = "date")    private java.sql.Date date;    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 String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public boolean isAdmin() {        return isAdmin;    }    public void setAdmin(boolean isAdmin) {        this.isAdmin = isAdmin;    }    public Date getTime() {        return time;    }    public void setTime(Date time) {        this.time = time;    }    public java.sql.Date getDate() {        return date;    }    public void setDate(java.sql.Date date) {        this.date = date;    }}

如有错误请指出,谢谢
最后附上X3的jar包链接:http://download.csdn.net/detail/wx_anonymity/9466284

2 0