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


    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)首先我们来到主布局文件,如下:

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="vertical"
     6     tools:context="com.himi.xutils.MainActivity" >
     7 
     8     <Button
     9         android:text="添加"
    10         android:layout_width="match_parent"
    11         android:layout_height="wrap_content"
    12         android:id="@+id/add"/>
    13     <Button
    14         android:text="删除"
    15         android:layout_width="match_parent"
    16         android:layout_height="wrap_content"
    17         android:id="@+id/delete"/>
    18     <Button
    19         android:text="修改"
    20         android:layout_width="match_parent"
    21         android:layout_height="wrap_content"
    22         android:id="@+id/update"/>
    23     <Button
    24         android:text="查询"
    25         android:layout_width="match_parent"
    26         android:layout_height="wrap_content"
    27         android:id="@+id/query"/>"
    28 
    29 </LinearLayout>

     (3)同时我们这里需要使用xUtils工具,需要到https://github.com/wyouflf/xUtils 处下载xuils工具包,下载解压如下:

    与此同时,我们需要到AndroidManifest之中添加使用xutils的权限,如下:

    (4)接下来当然是使用DbxUtils,来到MainActivity,如下:

      1 package com.himi.dbutils;
      2 
      3 import java.util.List;
      4 
      5 import com.himi.dbutils.bean.Parent;
      6 import com.himi.xutils.R;
      7 import com.lidroid.xutils.DbUtils;
      8 import com.lidroid.xutils.db.sqlite.Selector;
      9 import com.lidroid.xutils.db.sqlite.WhereBuilder;
     10 import com.lidroid.xutils.exception.DbException;
     11 
     12 import android.app.Activity;
     13 import android.os.Bundle;
     14 import android.view.View;
     15 import android.view.View.OnClickListener;
     16 import android.widget.Button;
     17 
     18 public class MainActivity extends Activity {
     19     private Button add;
     20     private Button delete;
     21     private Button update;
     22     private Button query;
     23     
     24     private DbUtils db;
     25 
     26     @Override
     27     protected void onCreate(Bundle savedInstanceState) {
     28         super.onCreate(savedInstanceState);
     29         setContentView(R.layout.activity_main);
     30         
     31         add = (Button) findViewById(R.id.add);
     32         delete = (Button) findViewById(R.id.delete);
     33         update = (Button) findViewById(R.id.update);
     34         query = (Button) findViewById(R.id.query);
     35         
     36         db = DbUtils.create(this);
     37         
     38         initEvents();
     39     }
     40 
     41     private void initEvents() {
     42         // TODO Auto-generated method stub
     43         
     44         /**
     45          * 添加数据
     46          */
     47         add.setOnClickListener(new OnClickListener() {
     48             
     49             @Override
     50             public void onClick(View v) {
     51                 
     52                 try {
     53                     if(db.findAll(Parent.class) == null) {
     54                         Parent parent1 = new Parent();
     55                         parent1.setEmail("12222222@qq.com");
     56                         parent1.setName("Tom");
     57                         parent1.setAge(23);
     58                         
     59                         Parent parent2 = new Parent();
     60                         parent2.setEmail("674747@qq.com");
     61                         parent2.setName("Kaka");
     62                         parent2.setAge(16);
     63                         
     64                         Parent parent3 = new Parent();
     65                         parent3.setEmail("132445@qq.com");
     66                         parent3.setName("Messci");
     67                         parent3.setAge(34);
     68                         
     69                         Parent parent4 = new Parent();
     70                         parent4.setEmail("76825672@qq.com");
     71                         parent4.setName("LuoDO");
     72                         parent4.setAge(21);
     73                         
     74                         
     75                         db.save(parent1);
     76                         db.save(parent2);
     77                         db.save(parent3);
     78                         db.save(parent4);
     79                     }
     80                 } catch (DbException e) {
     81                     // TODO Auto-generated catch block
     82                     e.printStackTrace();
     83                 }
     84             }
     85         });
     86         
     87         //删除数据
     88         delete.setOnClickListener(new OnClickListener() {
     89             
     90             @Override
     91             public void onClick(View v) {
     92                 /**
     93                  * public void deleteById(java.lang.Class<?> entityType,
     94                  * java.lang.Object idValue)
     95                  * 参数:entityType - 实体类类型
     96                  * 参数:idValue - 主键的值
     97                  * 
     98                  * public void delete(java.lang.Object entity)
     99                  * 参数:entity - 实体类实例
    100                  * 
    101                  * public void delete(java.lang.Class<?> entityType,
    102                  *  WhereBuilder whereBuilder)
    103                  * 参数:entityType - 实体类类型
    104                  * 参数:whereBuilder - WHERE条件WhereBuilder
    105                  * 
    106                  * public void deleteAll(java.util.List<?> entities)
    107                  * 参数:entities - 实体类实例集合
    108                  * 
    109                  * public void deleteAll(java.lang.Class<?> entityType)
    110                  * 参数:entityType - 实体类类型
    111                  * 
    112                  */
    113                 
    114                 try {
    115                     db.delete(Parent.class, WhereBuilder.b("name", "=", "LuoDO"));
    116                 } catch (DbException e) {
    117                     // TODO Auto-generated catch block
    118                     e.printStackTrace();
    119                 }
    120                 
    121             }
    122         });
    123         
    124         //修改数据
    125         
    126         update.setOnClickListener(new OnClickListener() {
    127             
    128             @Override
    129             public void onClick(View v) {
    130                 /**
    131                  * public void update(java.lang.Object entity,
    132                  * java.lang.String... updateColumnNames)
    133                  * 参数:entity - 实体类实例
    134                  * 参数:updateColumnNames - 需要更新的字段名
    135                  * 
    136                  * public void update(java.lang.Object entity, WhereBuilder whereBuilder,
    137                  *  java.lang.String... updateColumnNames)
    138                  * 参数:entity - 实体类实例
    139                  * 参数:whereBuilder - WHERE条件WhereBuilder
    140                  * 参数:updateColumnNames - 需要更新的字段名
    141                  * 
    142                  * public void updateAll(java.util.List<?> entities,
    143                  * java.lang.String... updateColumnNames)
    144                  * 参数:entities - 实体类实例集合
    145                  * 参数:updateColumnNames - 需要更新的字段名
    146                  * 
    147                  * public void updateAll(java.util.List<?> entities,
    148                   *    WhereBuilder whereBuilder,
    149                  *  java.lang.String... updateColumnNames)
    150                  * 参数:entities - 实体类实例集合
    151                  * 参数:whereBuilder - WHERE条件WhereBuilder
    152                  * 参数:updateColumnNames - 需要更新的字段名
    153                  * 
    154                  */
    155                 try {
    156                     List<Parent> lists = db.findAll(Selector.from(Parent.class));
    157                     Parent p = lists.get(0);
    158                     p.setName("hebao");
    159                     db.update(p, "name");
    160                 } catch (DbException e) {
    161                     // TODO Auto-generated catch block
    162                     e.printStackTrace();
    163                 }
    164                 
    165             }
    166         });
    167         //查询数据
    168         query.setOnClickListener(new OnClickListener() {
    169             
    170             @Override
    171             public void onClick(View v) {
    172                 /**
    173                  * public <T> T findById(java.lang.Class<T> entityType,
    174                   * java.lang.Object idValue)
    175                   * 参数:entityType - 实体类类型
    176                   * 参数:idValue - 主键ID的值(值为空时,抛出异常DbException)
    177                   * 
    178                   * public <T> T findFirst(Selector selector)
    179                   * 参数:selector - SQL查询条件描述 Selector
    180                   * 
    181                   * public <T> T findFirst(java.lang.Class<T> entityType)
    182                   * 参数:entityType - 实体类类型Class
    183                   * 
    184                   * public <T> java.util.List<T> findAll(Selector selector)
    185                   * 参数:selector - SQL查询条件描述 Selector
    186                   * 
    187                   * public <T> java.util.List<T> findAll(java.lang.Class<T> entityType)
    188                   * 参数:entityType - 实体类类型Class
    189                   * 
    190                  */
    191                 try {
    192                     //通过类型查找
    193                     List<Parent> lists = db.findAll(Parent.class);
    194                     //遍历lists
    195                     for(int x=0; x<lists.size(); x++) {
    196                         Parent p = (Parent)lists.get(x);
    197                         System.out.println("Id: "+p.getId()+" Name:"+p.getName()+" Email:"+p.getEmail());        
    198                     }
    199                     
    200                     Parent p1 = db.findFirst(Selector.from(Parent.class).
    201                             where("name","=","Tom"));
    202                     System.out.println("Tom:"+"id"+"---"+p1.getId());
    203                     
    204                     List<Parent> lists1 = db.findAll(Selector.from(Parent.class)
    205                             .where("id","<",4)
    206                             .and(WhereBuilder.b("age", ">", 20))
    207                             .orderBy("id"));
    208                     //遍历lists1
    209                     for(int x=0; x<lists1.size(); x++) {
    210                         Parent p = (Parent)lists1.get(x);
    211                         System.out.println("Id: "+p.getId()+" Name:"+p.getName()+" Email:"+p.getEmail());        
    212                     }
    213                     
    214                     
    215                     
    216                 } catch (DbException e) {
    217                     // TODO Auto-generated catch block
    218                     e.printStackTrace();
    219                 }
    220                 
    221             }
    222         });
    223         
    224         
    225     }
    226 
    227     
    228 }

    (5)布署程序到手机上,同时观察Logcat,如下:

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

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

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

     

  • 相关阅读:
    jdbc连接Mysql数据库
    测试ibatis3连接数据
    dbcp参数配置
    努力---是永远且持久的行为
    android---textview控件学习笔记之显示表情图片和文本(二)
    android---textview控件学习笔记之显示文本(一)
    程序员的要求
    android的adb命令中,pm,am的使用
    完成celery简单发送注册邮件
    培养代码逻辑
  • 原文地址:https://www.cnblogs.com/hebao0514/p/5435483.html
Copyright © 2020-2023  润新知