美文网首页android网络
Android-分享一个网络请求框架(xUtils3)

Android-分享一个网络请求框架(xUtils3)

作者: 阿博聊编程 | 来源:发表于2022-08-25 13:54 被阅读0次
图片来源网络,入侵必删

在维护一些年代久远的Android项目的时候,我们可能会遇到xUtils3网络请求框架。对于一些比较后面进入Android开发行业的小伙伴可能比较陌生,分享一下我知道的知识。

xUtils3

xUtils包含了orm, http(s), image, view注解, 但依然很轻量级(251K), 并且特性强大, 方便扩展。有着非常强大的特性:

  1. orm: 高效稳定的orm工具, 使得http接口实现时更方便的支持cookie和缓存.
  • 灵活的, 类似linq表达式的接口.
  • 和greenDao一致的性能.
  1. http(s): 基于UrlConnection, Android4.4以后底层为okHttp实现.
  • 请求协议支持11种谓词: GET,POST,PUT,PATCH,HEAD,MOVE,COPY,DELETE,OPTIONS,TRACE,CONNECT

  • 支持超大文件(超过2G)上传

  • 支持断点下载(如果服务端支持Range参数,客户端自动处理断点下载)

  • 支持cookie(实现了domain, path, expiry等特性)

  • 支持缓存(实现了Cache-Control, Last-Modified, ETag等特性, 缓存内容过多时使用过期时间+LRU双重机制清理)

  • 支持异步和同步(可结合RxJava使用)调用

  1. image: 有了http(s)及其下载缓存的支持, image模块的实现相当的简洁.
  • 支持内存缓存, 磁盘缓存(缩略图和原图), 并且支持回收被view持有, 但被MemCache移除的图片, 减少页面回退时的闪烁.

  • 支持在ListView滑动时, 自动停止被回收复用的item对应的下载任务(再次下载时断点续传)

  • 支持webp, gif(部分比较老的系统只展示静态图)

  • 支持圆角, 圆形, 方形等裁剪, 支持自动旋转...

  1. view注解: view注解模块仅仅400多行代码却灵活的支持了各种View注入和事件绑定.
  • 事件注解支持且不受混淆影响...

  • 支持绑定拥有多个方法的listener

xUtils3的引入

implementation 'org.xutils:xutils:3.9.0'

截止我发布博客,目前开源库的版本是3.9.0.最新版本请查看官方的wiki

xUtils3的混淆配置

-keepattributes Signature,*Annotation*
-keep public class org.xutils.** {
    public protected *;
}
-keep public interface org.xutils.** {
    public protected *;
}
-keepclassmembers class * extends org.xutils.** {
    public protected *;
}
-keepclassmembers @org.xutils.db.annotation.* class * {*;}
-keepclassmembers @org.xutils.http.annotation.* class * {*;}
-keepclassmembers class * {
    @org.xutils.view.annotation.Event <methods>;
}

xUtils3的使用

权限配置:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 可选 -->

初始化:

// 在application的onCreate中初始化
@Override
public void onCreate() {
    super.onCreate();
    x.Ext.init(this);
    x.Ext.setDebug(BuildConfig.DEBUG); // 是否输出debug日志, 开启debug会影响性能.
    ...
}

使用@Event事件注解:

/**
 * 1. 方法必须私有限定,
 * 2. 方法参数形式必须和type对应的Listener接口一致.
 * 3. 注解参数value支持数组: value={id1, id2, id3}
 * 4. 其它参数说明见{@link org.xutils.event.annotation.Event}类的说明.
 **/
@Event(value = R.id.btn_test1,
        type = View.OnClickListener.class/*可选参数, 默认是View.OnClickListener.class*/)
private void onTest1Click(View view) {
...
}

使用数据库:

Parent test = db.selector(Parent.class)
                    .where("id", "in", new int[]{1, 3, 6})
                    .or("age", "<", 29)
                    .findFirst();
long count = db.selector(Parent.class)
                    .where("name", "LIKE", "w%")
                    .and("age", ">", 32)
                    .count();
List<Parent> testList = db.selector(Parent.class)
                    .where("id", "between", new String[]{"1", "5"})
                    .findAll();
List<DbModel> list = db.selector(Child.class)
                    .where("age", "<", 18)
                    .groupBy("parentId")
                    .having(WhereBuilder.b("COUNT(parentId)", ">", 1))
                    .select("parentId, COUNT(parentId) as childNum")
                    .findAll();

简单使用网络请求:

@Event(value = R.id.btn_test2)
private void onTest2Click(View view) {
    RequestParams params = new RequestParams("https://www.baidu.com/s");
    // params.setSslSocketFactory(...); // 如果需要自定义SSL
    params.addQueryStringParameter("wd", "xUtils");
    x.http().get(params, new Callback.CommonCallback<String>() {
        @Override
        public void onSuccess(String result) {
            Toast.makeText(x.app(), result, Toast.LENGTH_LONG).show();
        }

        @Override
        public void onError(Throwable ex, boolean isOnCallback) {
            Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();
        }

        @Override
        public void onCancelled(CancelledException cex) {
            Toast.makeText(x.app(), "cancelled", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onFinished() {

        }
    });
}

这个开源库第一次接触的时候发现功能非常的齐全,但是目前来说主流的网络请求框架不是它,所以相对来说比较少见。我之前维护过两个使用xUtils3的项目,不熟悉的话可能要看一下文档深入了解一下。

相关文章

网友评论

    本文标题:Android-分享一个网络请求框架(xUtils3)

    本文链接:https://www.haomeiwen.com/subject/hgbtnrtx.html