xUtils3入门使用及部分解析

xUtils3是一个包含DbUtils、HttpUtils、ViewUtils、BitmapUtils四个模块的工具库,用于简化Android开发。本文介绍了如何搭建初始化环境,详细讲解了各模块的使用,包括DbUtils的ORM操作、ViewUtils的注解绑定、HttpUtils的网络请求以及BitmapUtils的图片处理。通过实例展示了如何在项目中高效地应用xUtils3。
摘要由CSDN通过智能技术生成

xUtils3入门使用及部分解析

xUtils简介

xUitls是一个第三方库,其就是一个工具类,是最初源于Afinal框架,进行了大量的重构,使得其能够支持大文件上传,以及更安全的Http请求协议支持。

它主要分为4个模块:DbUtils、HttpUtils、ViewUtils、BitmapUtils


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内存;
  • 可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等…

由于xUtils已经很久不更新了,目前我们就使用它的升级版,也就是xUtils3

这是它的官方网站

xUtils3相对于旧版有了一些变化:

  • HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略;

  • 支持标准的Cookie策略, 区分domain, path;

  • 事件注解去除不常用的功能, 提高性能;

  • 数据库api简化提高性能, 达到和greenDao一致的性能;

  • 图片绑定支持gif(受系统兼容性影响, 部分gif文件只能静态显示), webp; 支持圆角, 圆形, 方形等裁剪, 支持自动旋转。




实操部分:

搭建初始化环境

1.Gradle构建时添加以下依赖:
implementation 'org.xutils:xutils:3.8.9'
2.加入所需要的权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 可选 -->
3.进行初始化(记得是在application中进行初始化,这点与旧版不一致)
// 在application的onCreate中初始化
@Override
public void onCreate() {
   
    super.onCreate();
    x.Ext.init(this);
    x.Ext.setDebug(BuildConfig.DEBUG); // 是否输出debug日志, 开启debug会影响性能.
    ...
}
4.在配置文件中进行引用:

引用

5.在MainActivity也要进行声明

添加如下代码:

x.view().inject(this);

到此为止,xUitls3的初始化已经完成,接下来可以进行功能的使用了。




ViewUtils模块的使用

ViewUtils的使用无需findViewById和setClickListener等,它用注解进行了替代,大大简化了我们的开发。这里简单介绍几个常用注解

@ContentView()

这是个什么注解呢?

很明显,通过名字我们便可得知,它就是用来替代**setContentView()**的

它怎么使用呢?

我们点开它的源代码

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ContentView {
   
    int value();
}

可以看到,在这个注解中,只需要Value填入你的布局文件id即可。然后将其标注在你的Activity上即可

@ViewInject()

这是个什么注解呢?

通过直译这个注解可以很明显的知道,它就是用来注入view的,也就是说,它替代了我们的findViewById()

它怎么使用呢?

源代码:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ViewInject {
   
    int value();
    /* parent view id */
    int parentId() default 0;
}

可以看到,它也只需要注入value即可,并标注在TextView上即可。

例:
    @ViewInject(R.id.queryname)
    TextView tv;
@Event()

这个注解主要用于事件的处理。

源代码:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Event {
   

    /**
     * 控件的id集合, id小于1时不执行ui事件绑定.
     */
    int[] value();

    /**
     * 控件的parent控件的id集合, 组合为(value[i], parentId[i] or 0).
     */
    int[] parentId() default 0;

    /**
     * 事件的listener, 默认为点击事件.
     */
    Class<?> type() default View.OnClickListener.class;

    /**
     * 事件的setter方法名, 默认为set+type#simpleName.
     */
    String setter() default "";

    /**
     * 如果type的接口类型提供多个方法, 需要使用此参数指定方法名.
     */
    String method() default "";
}

这里有几点注意点:

  • 注解的方法必须用private进行修饰
  • 对于返回值类型没有要求
  • 参数名和type的接口要求的参数名要一致
  • 多个value值用{}括起来

举一个小例子:

 @Event(value = {
   R.id.btn1,R.id.btn2,R.id.btn3})
    private void onClick(View v) {
   
        switch (v.getId()){
   
            case R.id.btn1 :
                Toast.makeText(getApplicationContext(),"btn1被点击了",Toast.LENGTH_LONG).show();
            case R.id.btn2 :
                Toast.makeText(getApplicationContext(),"btn2被点击了",Toast.LENGTH_LONG).show();
            case R.id.btn3 :
                Toast.makeText(getApplicationContext(),"btn3被点击了",Toast.LENGTH_LONG).show();
        }
    }

btn




DbUtils模块的使用

首先,我们在MainActivity中new一个DbManager.DaoConfig

这个DaoConfig都有什么东西呢?这里我总结一下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值