XUtils 3 框架 介绍

本文详细介绍了XUtils3框架的基本用法,包括自定义Adapter加载网络图片、进行网络请求及数据库操作等内容,并提供了完整的示例代码。

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

03-22
<think>好的,用户想找关于utils3的技术资源或信息。首先,我需要确定utils3具体指的是什么。可能是一个库、工具包,或者是某个项目中的实用函数集合。 首先,检查常见的编程语言库。例如,Python的PyPI有没有名为utils3的包?搜索后发现,PyPI上确实有一个utils3包,但可能不常用,需要查看它的文档和功能。另外,可能用户指的是某个开源项目中的utils3模块,比如某些大型项目内部可能有utils3这样的工具模块。 然后,考虑其他语言的库,比如JavaScript的npm或者Java的Maven仓库中是否有类似名称的包。但根据用户提供的引用内容中提到了Python代码示例,可能更倾向于Python相关的资源。引用[1]提到一个包含实用脚本/类/包的存储库,可能utils3属于这类项目。需要进一步确认引用中的Repository是否指某个特定的GitHub仓库或内部项目。 另外,用户提供的引用[2]讨论了GIL、线程和进程,可能与并发处理相关,但不确定是否与utils3直接相关。可能需要排除这部分信息,专注于引用[1]提到的实用工具库。 接下来,思考用户可能的需求。他们可能在寻找现成的工具函数来加速开发,比如文件操作、字符串处理、算法实现等。建议他们检查官方文档或GitHub仓库,或者通过包管理器搜索。如果utils3不常见,可能需要建议替代方案,如Python的standard libraries中的util模块,或者流行的第三方库如more-itertools、boltons等。 最后,生成相关问题,帮助用户深入探索,比如如何安装、具体功能、替代库等。确保回答结构清晰,提供多种可能性,并引导用户验证具体来源。</think>关于“utils3”的技术资源或信息,以下是分步说明: 1. **确认具体定义** - “utils3”可能指: - 某个编程语言(如Python)的第三方工具库 - 某个项目内部维护的实用函数集合 - 特定框架的扩展工具包 2. **Python方向验证** - 通过PyPI查询: ```bash pip search utils3 ``` 结果显示存在`utils3`包(版本0.5.0),描述为"Utilities for Python 3"[^1] 3. **功能定位** - 典型工具函数可能包含: ```python # 文件处理 from utils3 import file_utils file_utils.read_lines(&#39;data.txt&#39;) # 数据结构 from utils3 import data_structures data_structures.flatten([[1,2], [3]]) ``` 4. **替代方案建议** - 标准库替代:`os`, `shutil`, `collections` - 流行第三方库:`more-itertools`, `boltons` 5. **源码定位建议** - 若为内部项目模块: ```python import utils3 print(utils3.__file__) # 查看模块路径 ``` - GitHub搜索关键词:`utils3 language:Python`
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值