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快速开发框架需要有以下权限:

<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. DbUtils基本使用:

(1)首先我们新建一个Android工程,命名为"DbUtils",如下:

(2)首先我们来到主布局文件,如下:

 <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,如下:

  • 点击" 添加 ",然后再点击" 查询 ",如下:

  • 点击" 修改",然后再点击"查询",如下:

  • 点击"删除",然后点击"查询",如下:

 

3. Android框架和工具之 xUtils(DbUtils )的更多相关文章

  1. 3. Android框架和工具之 xUtils(BitmapUtils)

    1. BitmapUtils 作用: 加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象: 支持加载网络图片和本地图片: 内存管理使用 ...

  2. 3. Android框架和工具之 xUtils(HttpUtils)

    1. HttpUtils 作用: 支持同步,异步方式的请求: 支持大文件上传,上传大文件不会oom: 支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD请求: 下载支持301/3 ...

  3. 3. Android框架和工具之 xUtils(ViewUtils )

    1. ViewUtils 作用: 完全注解方式就可以进行UI绑定和事件绑定. 无需findViewById和setClickListener等. 2. UI绑定 和 事件绑定 (1)UI绑定 下面我們 ...

  4. 13. Android框架和工具之 Android Drawable Factory

    1. AndroidDrawableFactory 一个生成Android应用所需尺寸图片的工具. 托管在Github之中: https://github.com/tizionario/Android ...

  5. 6. Android框架和工具之 JSON解析

    Android进阶笔记17:3种JSON解析工具(org.json.fastjson.gson)

  6. 4. Android框架和工具之 android-async-http

    1. android-async-http   简介 主要有以下功能: (1)发送异步http请求,在匿名callback对象中处理response信息: (2)http请求发生在UI(主)线程之外的 ...

  7. 14. Android框架和工具之 ImageLoader(图片加载)

    1. 这个图片加载框架网友很多都已经使用过,而且分析也很到位,这里我就不写了,直接引用别人,尊重别人的劳动成果. 2. 参考如下: (1)Android 开源框架Universal-Image-Loa ...

  8. 12. Android框架和工具之 StringUtils(字符串操作)

    1. StringUtils介绍: StringUtils是apache commons lang库(http://commons.apache.org/proper/commons-lang/dow ...

  9. 11. Android框架和工具之 Logger(调试代码)

    1. Logger Logger是android是一个简单.漂亮.功能强大的Android日志程序. 日志程序提供了 : 线程信息Thread information 类信息Class informa ...

随机推荐

  1. UVaLive 6802 Turtle Graphics (水题,模拟)

    题意:给定一个坐标,和一行命令,按照命令走,问你有多少点会被访问超过一次. 析:很简单么,按命令模拟就好,注意有的点可能走了多次,只能记作一次. 代码如下: #pragma comment(linke ...

  2. logstash开源日志收集查询分析系统

    http://storysky.blog.51cto.com/628458/1158707/ http://www.logstash.net/ http://blog.sina.com.cn/s/bl ...

  3. OC:继承、初始化方法、便利构造器

    A继承 的作用就是为了,节省代码.     继承 :子类会继承父类 里面所有的内容     思想 :凡是继承过来的实例变量和方法 都是自己的(是从父类遗传过来的)     继承的使用场景 : 当我们多 ...

  4. kafka分布式消息队列 — 基本概念介绍

    [http://www.inter12.org/archives/818] 这个应该算是之前比较火热的词了,一直没时间抽出来看看.一个新东西出来,肯定是为了解决某些问题,不然不会有它的市场.先简单看下 ...

  5. 转载:Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式

    Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式 出自:http://www.cnblogs.com/top5/archive/2012/08/04/2623464.html 关 ...

  6. MFC容器类介绍

    我们知道如果是单个的少数几个值弄些int , long,float ,double等类型的变量来装这些值就行了.但如果值太多这样就比较麻烦.当然数据超级多时就直接放数据库里存着去了. 但如果数值不多不 ...

  7. Java 打印堆栈的几种方法

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  8. 解决 Cocos2d-x 中 Android.mk 手动添加源文件

    转自:http://blog.csdn.net/ypfsoul/article/details/8909178 Makefile Android.mk 引发的思索 在我们编写 Android 平台 c ...

  9. OBD Experts OBD II Software OBD II Protocol Stack

    http://www.obdexperts.co.uk/stack.html OBD II Software OBD Experts can provide you with ready to use ...

  10. python学习进阶一

    map()函数 def format_name(s): return s.capitalize() print map(format_name, ['adam', 'LISA', 'barT']) R ...