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. int* V.S. int[]

    [int* V.S. int[]] 在C++中,int[]有2种形态,一种是指针形态,即使用方法和int*一样,另一种是符号形态,即只是一个编译期的符号(意味着在runtime期,所定义的int[]根 ...

  2. [iOS微博项目 - 2.6] - 获取微博数据

    github: https://github.com/hellovoidworld/HVWWeibo   A.新浪获取微博API 1.读取微博API     2.“statuses/home_time ...

  3. JQ的each

    写法一:遍历JSON数据 $.each(JSON.parse("{" + msg.d + "}"), function (key, name) { //处理得到 ...

  4. lambda表达式和ef的语句转化

    这两者转化可以用linqpad进行转化, 首先推荐一个网站可以了解一下orderby的排序方式 http://www.csharpwin.com/csharpspace/614.shtml 然后下面有 ...

  5. android shape(如自定义Button)

    Shape 前言:有时候会去自己去画一些Button的样式来展现在UI当中,其中主要用到的就是Shape 先来看一段代码: <?xml version="1.0" encod ...

  6. extjs 点击复选框在表格中增加相关信息行

    功能效果:点击复选框在表格中自动增加相关信息行,复选框取消则表格中内容自动删除 初始效果大概是这样~~~~~ // 定义初始 存放表格数据 var gridItems = []; //省份复选框 va ...

  7. STM32 + RT Thread OS 学习笔记[三]

    RTGUI 据说RTGUI是多线程的,因此与RT-Thread OS的耦合度较高,有可能要访问RT-Thread的线程控制块.如果要移植到其它OS,估计难度较大.目前还处于Alpha状态,最终将会包含 ...

  8. AS与JS相互通信(Flex中调用js函数)

    转载自http://www.blogjava.net/Alpha/archive/2009/06/27/284373.html Flex中As调用Js的方法是:     1.导入包 (import f ...

  9. Android Studio初步使用教程

    今年的Google全球开发者大会虽然没有新的Android系统和设备,但是还是推出了一些不错的产品,Android Studio就是其中之一.这个基于Intellij IDEA开发的Android I ...

  10. Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) B. Guess the Permutation 水题

    B. Guess the Permutation 题目连接: http://www.codeforces.com/contest/618/problem/B Description Bob has a ...