XUtils 3 框架 介绍

随着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

//首先,配置DaoConfig
DbManager.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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值