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. poj 2239 Selecting Courses(二分匹配简单模板)

    http://poj.org/problem?id=2239 这里要处理的是构图问题p (1 <= p <= 7), q (1 <= q <= 12)分别表示第i门课在一周的第 ...

  2. DefWndProc/WndProc/IMessageFilter的区别

    谈到Winform的消息处理,多数时候是通过事件处理程序进行的,但当没有对应的事件时通常的做法是声明DefWndProc或者WndProc或者IMessageFilter,经常在网上看见有文章将三者并 ...

  3. Add mappings to an Elasticsearch index in realtime

    Changing mapping on existing index is not an easy task. You may find the reason and possible solutio ...

  4. PB学习笔记(一)

    前言:我绝对很痛恨PB.1.没人带2.自己摸索3.头发掉了4.老大不停的给任务5.这语言老的不行了6,代码可读性不是一般的差 我绝对很喜欢PB.1.自我学习成功后那种成就感2.老大也会帮给我看看,指点 ...

  5. 用vagrant搭建一个自己的lnmp环境(一)

    用vagrant搭建自己的lnmp环境 1.工具: a.vagrant b.virtual box c.linux服务器box(此处我使用centos 7.0) 2.安装完vagrant和virtua ...

  6. 【待补】java开发Web Service

    Java中WebService实例 http://blog.csdn.net/kardelpeng/article/details/6321019 java 调用webservice的各种方法总结 h ...

  7. 传统的Ado.net 参数设置:params SqlParameter[] commandParameters

    C#代码  ExecuteReader(string connectionString, CommandType commandType, string commandText, params Sql ...

  8. 16.ARC

    Swift 使用自动引用计数(ARC)机制来跟踪和管理应用程序的内存.通常情况下,Swift 内存管理机制会一直起作用,我们无须自己来考虑内存的管理.ARC 会在类的实例不再被使用时,自动释放其占用的 ...

  9. winrar激活

    (从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期2014-02-11) 新建记事本文件(txt文件),然后将文件另存为以 rarreg.key 为文件名的文件(当然由于设置的不同,可能 ...

  10. 组合View Controller时遇到的一点问题

    View Controller的组合应用其实很常见了,比如说Tab bar controller和Navigation view controller的组合使用,像这种一般都是Navigation v ...