android网络

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

2022-08-25  本文已影响0人  阿博聊编程
图片来源网络,入侵必删

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

xUtils3

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

  1. orm: 高效稳定的orm工具, 使得http接口实现时更方便的支持cookie和缓存.
  1. http(s): 基于UrlConnection, Android4.4以后底层为okHttp实现.
  1. image: 有了http(s)及其下载缓存的支持, image模块的实现相当的简洁.
  1. view注解: view注解模块仅仅400多行代码却灵活的支持了各种View注入和事件绑定.

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的项目,不熟悉的话可能要看一下文档深入了解一下。

上一篇 下一篇

猜你喜欢

热点阅读