3. Android框架和工具之 xUtils(DbUtils )
2016-04-26 16:06
459 查看
1. xUtils简介
xUtils 包含了很多实用的android工具。xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...
xUtils 下载地址为:https://github.com/wyouflf/xUtils
xUtils最低兼容android 2.2 (API level 8)。 当前xUtils主要有四大模块:
(1)DbUtils 模块
android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
自动加载外键关联实体,支持延时加载;
支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
(2)ViewUtils 模块
android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定;
新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
目前支持常用的11种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
(3)HttpUtils 模块
支持同步,异步方式的请求;
支持大文件上传,上传大文件不会oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD请求;
下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
返回文本内容的GET请求支持缓存,可设置默认过期时间和针对当前请求的过期时间。
(4)BitmapUtils 模块
加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
支持加载网络图片和本地图片;
内存管理使用lru算法,更好的管理bitmap内存;
可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...
2. 注意:
使用xUtils快速开发框架需要有以下权限:
混淆时注意事项:
不要混淆xUtils中的注解类型,添加混淆配置:-keep class * extends java.lang.annotation.Annotation { *; }
对使用DbUtils模块持久化的实体类不要混淆,或者注解所有表和列名称@Table(name="xxx"),@Id(column="xxx"),@Column(column="xxx"),@Foreign(column="xxx",foreign="xxx");
3. [b]DbUtils基本使用:[/b]
[b](1)首先我们新建一个Android工程,命名为"DbUtils",如下:
[/b]
[b](2)首先我们来到主布局文件,如下:[/b]
(3)同时我们这里需要使用xUtils工具,需要到https://github.com/wyouflf/xUtils 处下载xuils工具包,下载解压如下:
与此同时,我们需要到AndroidManifest之中添加使用xutils的权限,如下:
(4)接下来当然是使用DbxUtils,来到MainActivity,如下:
(5)布署程序到手机上,同时观察Logcat,如下:
[b]点击" 添加 ",然后再[/b]点击" 查询 ",如下:
点击" 修改",然后再点击"查询",如下:
点击"删除",然后点击"查询",如下:
xUtils 包含了很多实用的android工具。xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...
xUtils 下载地址为:https://github.com/wyouflf/xUtils
xUtils最低兼容android 2.2 (API level 8)。 当前xUtils主要有四大模块:
(1)DbUtils 模块
android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
自动加载外键关联实体,支持延时加载;
支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
(2)ViewUtils 模块
android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定;
新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
目前支持常用的11种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
(3)HttpUtils 模块
支持同步,异步方式的请求;
支持大文件上传,上传大文件不会oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD请求;
下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
返回文本内容的GET请求支持缓存,可设置默认过期时间和针对当前请求的过期时间。
(4)BitmapUtils 模块
加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
支持加载网络图片和本地图片;
内存管理使用lru算法,更好的管理bitmap内存;
可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...
2. 注意:
使用xUtils快速开发框架需要有以下权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
混淆时注意事项:
不要混淆xUtils中的注解类型,添加混淆配置:-keep class * extends java.lang.annotation.Annotation { *; }
对使用DbUtils模块持久化的实体类不要混淆,或者注解所有表和列名称@Table(name="xxx"),@Id(column="xxx"),@Column(column="xxx"),@Foreign(column="xxx",foreign="xxx");
3. [b]DbUtils基本使用:[/b]
[b](1)首先我们新建一个Android工程,命名为"DbUtils",如下:
[/b]
[b](2)首先我们来到主布局文件,如下:[/b]
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.himi.xutils.MainActivity" > <Button android:text="添加" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/add"/> <Button android:text="删除" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/delete"/> <Button android:text="修改" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/update"/> <Button android:text="查询" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/query"/>" </LinearLayout>
(3)同时我们这里需要使用xUtils工具,需要到https://github.com/wyouflf/xUtils 处下载xuils工具包,下载解压如下:
与此同时,我们需要到AndroidManifest之中添加使用xutils的权限,如下:
(4)接下来当然是使用DbxUtils,来到MainActivity,如下:
package com.himi.dbutils; import java.util.List; import com.himi.dbutils.bean.Parent; import com.himi.xutils.R; import com.lidroid.xutils.DbUtils; import com.lidroid.xutils.db.sqlite.Selector; import com.lidroid.xutils.db.sqlite.WhereBuilder; import com.lidroid.xutils.exception.DbException; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { private Button add; private Button delete; private Button update; private Button query; private DbUtils db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); add = (Button) findViewById(R.id.add); delete = (Button) findViewById(R.id.delete); update = (Button) findViewById(R.id.update); query = (Button) findViewById(R.id.query); db = DbUtils.create(this); initEvents(); } private void initEvents() { // TODO Auto-generated method stub /** * 添加数据 */ add.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { try { if(db.findAll(Parent.class) == null) { Parent parent1 = new Parent(); parent1.setEmail("12222222@qq.com"); parent1.setName("Tom"); parent1.setAge(23); Parent parent2 = new Parent(); parent2.setEmail("674747@qq.com"); parent2.setName("Kaka"); parent2.setAge(16); Parent parent3 = new Parent(); parent3.setEmail("132445@qq.com"); parent3.setName("Messci"); parent3.setAge(34); Parent parent4 = new Parent(); parent4.setEmail("76825672@qq.com"); parent4.setName("LuoDO"); parent4.setAge(21); db.save(parent1); db.save(parent2); db.save(parent3); db.save(parent4); } } catch (DbException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); //删除数据 delete.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { /** * public void deleteById(java.lang.Class<?> entityType, * java.lang.Object idValue) * 参数:entityType - 实体类类型 * 参数:idValue - 主键的值 * * public void delete(java.lang.Object entity) * 参数:entity - 实体类实例 * * public void delete(java.lang.Class<?> entityType, * WhereBuilder whereBuilder) * 参数:entityType - 实体类类型 * 参数:whereBuilder - WHERE条件WhereBuilder * * public void deleteAll(java.util.List<?> entities) * 参数:entities - 实体类实例集合 * * public void deleteAll(java.lang.Class<?> entityType) * 参数:entityType - 实体类类型 * */ try { db.delete(Parent.class, WhereBuilder.b("name", "=", "LuoDO")); } catch (DbException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); //修改数据 update.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { /** * public void update(java.lang.Object entity, * java.lang.String... updateColumnNames) * 参数:entity - 实体类实例 * 参数:updateColumnNames - 需要更新的字段名 * * public void update(java.lang.Object entity, WhereBuilder whereBuilder, * java.lang.String... updateColumnNames) * 参数:entity - 实体类实例 * 参数:whereBuilder - WHERE条件WhereBuilder * 参数:updateColumnNames - 需要更新的字段名 * * public void updateAll(java.util.List<?> entities, * java.lang.String... updateColumnNames) * 参数:entities - 实体类实例集合 * 参数:updateColumnNames - 需要更新的字段名 * * public void updateAll(java.util.List<?> entities, * WhereBuilder whereBuilder, * java.lang.String... updateColumnNames) * 参数:entities - 实体类实例集合 * 参数:whereBuilder - WHERE条件WhereBuilder * 参数:updateColumnNames - 需要更新的字段名 * */ try { List<Parent> lists = db.findAll(Selector.from(Parent.class)); Parent p = lists.get(0); p.setName("hebao"); db.update(p, "name"); } catch (DbException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); //查询数据 query.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { /** * public <T> T findById(java.lang.Class<T> entityType, * java.lang.Object idValue) * 参数:entityType - 实体类类型 * 参数:idValue - 主键ID的值(值为空时,抛出异常DbException) * * public <T> T findFirst(Selector selector) * 参数:selector - SQL查询条件描述 Selector * * public <T> T findFirst(java.lang.Class<T> entityType) * 参数:entityType - 实体类类型Class * * public <T> java.util.List<T> findAll(Selector selector) * 参数:selector - SQL查询条件描述 Selector * * public <T> java.util.List<T> findAll(java.lang.Class<T> entityType) * 参数:entityType - 实体类类型Class * */ try { //通过类型查找 List<Parent> lists = db.findAll(Parent.class); //遍历lists for(int x=0; x<lists.size(); x++) { Parent p = (Parent)lists.get(x); System.out.println("Id: "+p.getId()+" Name:"+p.getName()+" Email:"+p.getEmail()); } Parent p1 = db.findFirst(Selector.from(Parent.class). where("name","=","Tom")); System.out.println("Tom:"+"id"+"---"+p1.getId()); List<Parent> lists1 = db.findAll(Selector.from(Parent.class) .where("id","<",4) .and(WhereBuilder.b("age", ">", 20)) .orderBy("id")); //遍历lists1 for(int x=0; x<lists1.size(); x++) { Parent p = (Parent)lists1.get(x); System.out.println("Id: "+p.getId()+" Name:"+p.getName()+" Email:"+p.getEmail()); } } catch (DbException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } }
(5)布署程序到手机上,同时观察Logcat,如下:
[b]点击" 添加 ",然后再[/b]点击" 查询 ",如下:
点击" 修改",然后再点击"查询",如下:
点击"删除",然后点击"查询",如下:
相关文章推荐
- Android 加载图片时根据哪个类获得的值,大致判断什么时候Out Of Memory
- 霓虹灯效果(用TextView实现)
- Android 停止调试程序
- Android studio 克隆分支
- Android应用中实现手势控制图片缩放的完全攻略
- android BitmapFactroy
- Android实现发送短信的功能
- Android学习(45) -- 自定义控件(9) 下拉刷新 (添加footer)
- Android TextView指定关键字高亮显示
- Android MVP 模式的使用
- Android 调用系统联系人界面的添加联系人,添加已有联系人,编辑和修改。
- android cts理清testpackage和文件名的对应关系
- android waiting for debugger
- 2. Android框架和工具之 Volley
- The project target (Android 5.0.1) was not properly loaded.
- Android 平台电容式触摸屏硬件基本原理
- android测试手机不显示崩溃日志
- (转)Android Studio 不错的开源库
- Android中手机通讯录的获取
- (4.5.4.3)使用Android Studio进行本地单元测试(Local Unit Tests)