Android xUtils框架最全使用详解
本文目录
- xUtils3简介
- xUtils使用方法
- 使用前准备
- 功能1:访问网络
- 不带参数的网络请求
- 带参数的请求
- 功能2:加载网络图片
- 功能3:框架注解
- 布局文件注解
- 控件注解
- 点击事件注解
- 功能4:数据库映射
- 增加数据
- 删除数据
- 修改数据
- 查询数据
xUtils3简介
xUtils 包含了orm, http(s), image, view注解, 但依然很轻量级(251K), 并且特性强大, 方便扩展.
官网:https://github.com/wyouflf/xUtils3
xUtils使用方法
使用前准备
第一步:引入
implementation 'org.xutils:xutils:3.8.5'
第二步:添加权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
AndroidManifest.xml
文件application
节点里添加
android:requestLegacyExternalStorage="true"
android:usesCleartextTraffic="true"
第三步:MainActivity中添加
x.Ext.init(getApplication());
x.Ext.setDebug(BuildConfig.DEBUG);// 是否输出debug日志, 开启debug会影响性能.
x.view().inject(this);//没有用到view注解可以先不用
功能1:访问网络
不带参数的网络请求
不带缓存
RequestParams params = new RequestParams("http://baidu.com");
x.http().get(params, new Callback.CommonCallback<String>() {@Overridepublic void onSuccess(String result) {}@Overridepublic void onError(Throwable ex, boolean isOnCallback) {}@Overridepublic void onCancelled(CancelledException cex) {}@Overridepublic void onFinished() {}
});
带缓存
RequestParams params = new RequestParams("http://baidu.com");
x.http().get(params, new Callback.CacheCallback<String>() {@Overridepublic boolean onCache(String result) {return false;}@Overridepublic void onSuccess(String result) {Log.i("MainActivity", result);}@Overridepublic void onError(Throwable ex, boolean isOnCallback) {Log.i("MainActivity", ex.getMessage());}@Overridepublic void onCancelled(CancelledException cex) {}@Overridepublic void onFinished() {}
});
带参数的请求
RequestParams params = new RequestParams("https://www.baidu.com/s");// params.setSslSocketFactory(...); // 如果需要自定义SSL
params.addQueryStringParameter("wd", "xUtils");
功能2:加载网络图片
ImageOptions imageOptions;
imageOptions = new ImageOptions.Builder().setSize(DensityUtil.dip2px(120), DensityUtil.dip2px(120)).setRadius(DensityUtil.dip2px(5))// 如果ImageView的大小不是定义为wrap_content, 不要crop..setCrop(true) // 很多时候设置了合适的scaleType也不需要它.// 加载中或错误图片的ScaleType//.setPlaceholderScaleType(ImageView.ScaleType.MATRIX).setImageScaleType(ImageView.ScaleType.CENTER_CROP).setLoadingDrawableId(R.mipmap.ic_launcher).setFailureDrawableId(R.mipmap.ic_launcher).build();
// 加载网络图片
x.image().bind(imageView, url, imageOptions);// 加载本地assets目录的图片
x.image().bind(imageView, "assets://test.gif", imageOptions);// resources file
x.image().bind(imageView, "res://" + R.minimap.test, imageOptions);// local file
x.image().bind(imageView, new File("/sdcard/test.gif").toURI().toString(), imageOptions);
x.image().bind(imageView, "/sdcard/test.gif", imageOptions);
x.image().bind(imageView, "file:///sdcard/test.gif", imageOptions);
x.image().bind(imageView, "file:/sdcard/test.gif", imageOptions);x.image().bind(imageView, url, imageOptions, new Callback.CommonCallback<Drawable>() {...});
x.image().loadDrawable(url, imageOptions, new Callback.CommonCallback<Drawable>() {...});
// 用来获取缓存文件
x.image().loadFile(url, imageOptions, new Callback.CommonCallback<File>() {...});
功能3:框架注解
布局文件注解
//替代onCreate方法中的 setContentView(R.layout.activity_main);
@ContentView(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {}
控件注解
@ViewInject(R.id.textView)
private TextView mTextView;
点击事件注解
单个点击事件
/*** 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) {...
}
多个点击事件
@Event(value = {R.id.button,R.id.button2},type = View.OnClickListener.class/*可选参数, 默认是View.OnClickListener.class*/)
private void onTest1Click(View view) {switch (view.getId()){case R.id.button:Log.i("MainActivity", "button1 click");break;case R.id.button2:Log.i("MainActivity", "button2 click");break;}
}
功能4:数据库映射
下面以单表为例演示xUtils框架怎么对数据库进行增删改查操作
首先添加一个实体类,在实体类上加一个注解
package com.hnu.sqlite.db;import org.xutils.db.annotation.Column;
import org.xutils.db.annotation.Table;@Table(name = "user")
public class User {@Column(name = "id", isId = true)private int id;@Column(name = "username")private String username;@Column(name = "password")private String password;@Column(name = "age")private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", age=" + age +'}';}
}
在对数据库操作前,先创建DaoConfig
对象
DbManager.DaoConfig daoConfig = new DbManager.DaoConfig().setDbName("test.db")// 不设置dbDir时, 默认存储在app的私有目录.// .setDbDir(new File("/sdcard")) // "sdcard"的写法并非最佳实践, 这里为了简单, 先这样写了..setDbVersion(2).setDbOpenListener(new DbManager.DbOpenListener() {@Overridepublic void onDbOpened(DbManager db) {// 开启WAL, 对写入加速提升巨大db.getDatabase().enableWriteAheadLogging();}}).setDbUpgradeListener(new DbManager.DbUpgradeListener() {@Overridepublic void onUpgrade(DbManager db, int oldVersion, int newVersion) {// TODO: ...// db.addColumn(...);// db.dropTable(...);// ...// or// db.dropDb();}});
增加数据
DbManager db = null;try {db = x.getDb(daoConfig);User user = new User();user.setUsername("test"+System.currentTimeMillis());user.setPassword("passwd");user.setAge(30);db.save(user);} catch (DbException e) {e.printStackTrace();return;}
删除数据
根据id
删除
DbManager db = null;
try {db = x.getDb(daoConfig);User user = new User();user.setId(2);db.delete(user);
} catch (DbException e) {e.printStackTrace();return;
}
根据条件删除
DbManager db = null;
try { db = x.getDb(daoConfig);db.delete(User.class,WhereBuilder.b("username", "=", "test"));} catch (DbException e) {e.printStackTrace();return;
}
修改数据
根据id
修改
try { DbManager db = null;db = x.getDb(daoConfig);User user = new User();user.setId(1);user.setUsername("new user");user.setPassword("new passwd");user.setAge(30);db.saveOrUpdate(user);// db.update(user);或者用这个方法修改} catch (DbException e) {e.printStackTrace();return;}
根据条件修改
try { DbManager db = null;db = x.getDb(daoConfig);db.update(User.class, WhereBuilder.b("username", "=", "test"),
// WhereBuilder.b("id", "=", 1).and("isAdmin", "=", true).,new KeyValue("username", "test_name"), new KeyValue("password", "new pss"));
} catch (DbException e) {e.printStackTrace();return;
}
查询数据
DbManager db = null;
try {// 删除1db = x.getDb(daoConfig);List<User> users = new ArrayList<>();users= db.selector(User.class).orderBy("id", true).limit(1000).where("username","=","test").findAll();
// users= db.selector(User.class).orderBy("id", true).limit(1000).findAll();
// users= db.selector(User.class).findAll();for (User user : users){Log.i("testdb","test" + user);}} catch (DbException e) {e.printStackTrace();return;
}
Android xUtils框架最全使用详解相关推荐
- Android Binder框架实现之Parcel详解之基本数据的读写
Android Binder框架实现之Parcel详解之基本数据的读写 Android Binder框架实现目录: Android Binder框架实现之Binder的设计思想 Android ...
- Android Binder框架实现之bindService详解
Android Binder框架实现之bindService详解 Android Binder框架实现目录: Android Binder框架实现之Binder的设计思想 Android Bi ...
- Android ORM框架 GreenDao 的使用详解
一.前言 关于 Android 中常用的数据存储方式我们前面已经讲了 Sp 存储 和 文件存储,但是对于数据量比较大,并且结构复杂的数据我们想要存储只能通过数据库进行处理,Android 中提供了一个 ...
- Java持久层框架MyBatis全注解详解
org.apache.ibatis.annotations包下有着 mybatis 所有的注解,让我们一文打尽! 1 @Mapper MyBatis映射器的标记接口 从mybatis3.4.0开始加入 ...
- androidentity什么用_Android ORM 框架:GreenDao 使用详解(进阶篇)
前言 在 Android ORM 框架:GreenDao 使用详解(基础篇) 中,我们了解了 GreenDao 的基本使用,本文我们将深入讲解 GreenDao 的使用 . 一.复杂表结构 a, 使用 ...
- Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)
本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning 上篇文章<<Android中measure过程.WRAP_CONTENT详解以及xml布局文 ...
- Android 4.1-Jelly Bean新特性详解
Android 4.1Jelly Bean新特性详解 发布会已经结束,Android新一代的4.1版本,代号Jelly Bean(果冻豆)的新系统已经正式问世,除了新架构.全新通知栏和搜索功能之外,实 ...
- 深入理解Android(一):Gradle详解
http://www.infoq.com/cn/articles/android-in-depth-gradle/ http://www.infoq.com/cn/articles/android-i ...
- 《Android 网络开发与应用实战详解》——2.1节简析Android安装文件
本节书摘来自异步社区<Android 网络开发与应用实战详解>一书中的第2章,第2.1节简析Android安装文件,作者 王东华,更多章节内容可以访问云栖社区"异步社区" ...
- ceph存储原理_赠书 | Linux 开源存储全栈详解——从Ceph到容器存储
// 留言点赞赠书我有书,你有故事么?留言说出你的存储故事留言点赞前两名,免费送此书截止日期12.27号12.30号公布名单 // 内容简介 本书致力于帮助读者形成有关Linux开源存储世界的细致的拓 ...
最新文章
- 如何把html转换pdf,怎么把html转换成pdf
- 关于学习Python的一点学习总结(30->递归实例)
- R语言dplyr包mutate_all函数一次性处理所有的数据列的内容(使用统一的函数)实战
- Nginx Http认证 实现访问网站或目录密码认证保护
- MySQL 中的反斜杠 \\,真是太坑了!!
- Spring MVC-01循序渐进之Model 2和MVC
- Spring 为啥默认把 bean 设计成单例的?
- python 高级面试题_Python高阶面试题
- [VsCode] 开发所使用的VsCode的插件
- Java程序编译的几个方法(编辑器Notepad++)
- NFS方式挂载rootfs的设置方法
- 推荐一个wpfsliverlight的图表控件
- CVPR2022 | 利用域自适应思想,北大、字节跳动提出新型弱监督物体定位框架
- KVM安装(RHEL_6.4x64)
- 2018年最新桌面CPU性能排行天梯图(含至强处理器)
- java实现socket.io客户端功能
- 一文了解plc编程、电脑编程、手机APP编程、组态编程、云编程(上)
- ANN之乘积量化PQ
- 小红书种草笔记怎么写?种草笔记标题怎么写比较好
- jsp如何使用layerui