Android xUtils3.0使用手册(一)- 基础功能使用

xUtils3 其功能不得不说,简化了很多的开发步骤,可以说是非常好的开发工具,但是苦于没有完整的使用手册,下面是使用中的一些总结,不断完善。

xUtils 版本 3.3.36
jar包下载地址

http://files.cnblogs.com/files/steffen/xUtils-3.3.36.zip

GitHub项目地址

https://github.com/wyouflf/xUtils3

 

 

 

 

 

使用前配置

1 <uses-permission android:name="android.permission.INTERNET" />
2 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

导入文件

方法1:导入jar包文件;

方法2:在gradle中添加依赖:

dependencies {
    compile ‘org.xutils:xutils:3.3.44‘
}


 

1. xUtils中的IOC框架

使用xUtils的第一步就是先创建自己的Application类,在MyApplication中初始化xUtils,代码如下:

Android xUtils3.0使用手册(一)- 基础功能使用
1 public class MyApplication extends Application {
2     @Override     
3     public void onCreate() {
4         super.onCreate();
5         x.Ext.init(this); //xUtils初始化     
6     } 
7 }
Android xUtils3.0使用手册(一)- 基础功能使用

在AndroidManifest.xml的application标签中添加如下代码:    

1 android:name=".MyApplication" 

这样初始化就算完成了。

 

例:下面使用IOC框架的代码如下:

Android xUtils3.0使用手册(一)- 基础功能使用
 1 import org.xutils.view.annotation.ContentView;
 2 import org.xutils.view.annotation.Event;
 3 import org.xutils.view.annotation.ViewInject;
 4 import org.xutils.x;
 5 // 获取Activity布局
 6 @ContentView(R.layout.activity_main)
 7 public class MainActivity extends Activity {
 8     // 获取控件ID
 9     @ViewInject(R.id.mybut)
10     private Button mybut;
11 
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         x.view().inject(this); // 初始化x.view(), 否则ID获取失败
16     }
17 
18     /** 添加控件监听事件 */
19     @Event(value = {R.id.mybut, R.id.myradio},type = View.OnClickListener.class)
20     private void onButtonClick(View v){
21         switch (v.getId()) {
22             case R.id.mybut:
23                 Toast.makeText(this,"我是xUtils的IOC功能", Toast.LENGTH_SHORT).show();
24                 break;
25             case R.id.myradio:
26                 break;
27         }
28     }
29 } 
Android xUtils3.0使用手册(一)- 基础功能使用

 注释:监听事件中,@Event, value后面是 Array,当多个ID时{R.id.btn1, R.id.btn2, R.id.btn3, ···}; 当只有一个ID时可直接写 value=R.id.btn。

当有多个ID时,要保证后面事件的类型(type)要是一致的,否则要在不同的方法中实现。

另:点击事件方法名一定要包含onClick或者onEven。

 

2. 网络请求

RequestParams 参数:

RequestParams params = new RequestParams(url);

.addQueryStringParamter("wd", "xUtils"); // 适用于GET请求方式;类似于字符串拼接 http://xxx/x?wd=xUtils。 

.addBodyParameter("wd", "xUtils"); // 适用于POST请求方式;添加到Body体的参数。

 

2.1 GET/POST请求

    get和post请求并无太大区别,主要区别在于参数的添加方法上。

  GET请求 POST请求
请求参数添加:   .addQueryStringParamter("wd", "xUtils");   .addBodyParameter("wd", "xUtils");
请求的方法(带缓冲):   x.http().get(params,  new Callback.CommonCallback<String>() { });      x.http().post(params,  new Callback.CommonCallback<String>() { });   
请求的方法(带缓冲):   x.http().get(params,  new Callback.CacheCallback<String>() { });      x.http().post(params,  new Callback.CacheCallback<String>() { });   

 

 

 

2.1.1 无缓存请求(以post为例)

Android xUtils3.0使用手册(一)- 基础功能使用
 1 RequestParams params = new RequestParams("http://xxx.com/xx");
 2 x.http().post(params,  new Callback.CommonCallback<String>() { 
 3         @Override
 4         public void onSuccess(String result) {
 5             // 请求成功后,返回结果
 6         }
 7         @Override     
 8         public void onError(Throwable ex, boolean isOnCallback) {
 9             // 请求失败后返回结果
10             if (!isNetworkConnections() || ex instanceof HttpException) {
11                 // 网络错误
12             } else {
13                 // 其他请求错误
14         }
15         @Override     
16         public void onCancelled(Callback.CancelledException cex) {
17             // 中断请求
18         }
19         @Override     
20         public void onFinished() {
21             // 请求结束(必调用)
22         } 
23     }
24 );
25 /**
26  * @return 网络是否连接 true:有网络,false:无网络
27  */
28 private boolean isNetworkConnections() {
29     ConnectivityManager con = (ConnectivityManager) x.app().getSystemService(Context.CONNECTIVITY_SERVICE);
30     boolean wifi = con.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected();
31     boolean internet = con.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected();
32     return (wifi || internet);
33 }
Android xUtils3.0使用手册(一)- 基础功能使用

 

2.1.2 有缓存请求(以POST为例)

Android xUtils3.0使用手册(一)- 基础功能使用
 1 RequestParams params = new RequestParams("http://xxx.com/xx");
 2 x.http().post(params,  new Callback.CacheCallback<String>() { 
 3         @Override
 4         public void onSuccess(String result) {
 5             // 请求成功后,返回结果
 6         }
 7         @Override
 8         public boolean onCache(String result) {
 9             // 此方法为本地加载回调方法,本地没有数据则不会调用此方法
10             // @param result 缓存中得到的数据
11             // @return true 如果缓存中有数据就不再进行网络请求
12             // false 得到缓存数据后仍进行网络请求
13             return ture;
14         }
15         @Override     
16         public void onError(Throwable ex, boolean isOnCallback) {
17             // 请求失败后返回结果
18             if (!isNetworkConnections() || ex instanceof HttpException) {
19                 // 网络错误
20             } else {
21                 // 其他请求错误
22         }
23         @Override     
24         public void onCancelled(Callback.CancelledException cex) {
25             // 中断请求
26         }
27         @Override     
28         public void onFinished() {
29             // 请求结束(必调用)
30         } 
31     }
32 );    
Android xUtils3.0使用手册(一)- 基础功能使用


 

3. 图片加载

3.1 普通图片加载

最简单的加载方式:

x.image().bind(image, "http://pic6.nipic.com/20100418/4581549_084724004690_2.jpg");

当然我们也可以设置一些属性:

Android xUtils3.0使用手册(一)- 基础功能使用
1 ImageOptions imageOptions = new ImageOptions.Builder()
2                     .setSize(120, 120)
3                     .setRadius(DensityUtil.dip2px(5))
4                     .setCrop(true)
5                     .setImageScaleType(ImageView.ScaleType.CENTER_CROP)
6                     .setLoadingDrawableId(R.mipmap.ic_launcher)
7                     .setFailureDrawableId(R.mipmap.ic_launcher)
8                     .build(); 
9 x.image().bind(image, "http://pic6.nipic.com/20100418/4581549_084724004690_2.jpg",imageOptions);
Android xUtils3.0使用手册(一)- 基础功能使用

 

3.2 圆形图片加载

Android xUtils3.0使用手册(一)- 基础功能使用
ImageOptions options = new ImageOptions.Builder()
                .setLoadingDrawableId(R.mipmap.ic_launcher)
                .setFailureDrawableId(R.mipmap.ic_launcher)
                .setUseMemCache(true)
                .setCircular(true) // 设置成圆形图片
                .setFadeIn(true) //淡入效果
                .setImageScaleType(ImageView.ScaleType.FIT_CENTER)
                .build();
Android xUtils3.0使用手册(一)- 基础功能使用

 注:圆形图片加载options的设置对本地图片无效。

3.3 GIF图片加载

Android xUtils3.0使用手册(一)- 基础功能使用
ImageOptions options = new ImageOptions.Builder()
                .setLoadingDrawableId(R.mipmap.ic_launcher)
                .setFailureDrawableId(R.mipmap.ic_launcher)
                .setUseMemCache(true)
                .setIgnoreGif(true) // 允许加载GIF图片
                .setFadeIn(true) //淡入效果
                .setImageScaleType(ImageView.ScaleType.FIT_CENTER)
                .build();
Android xUtils3.0使用手册(一)- 基础功能使用

3.4 ImageOptions属性

.setFadeIn(true); //淡入效果

.setCircular(true); //设置图片显示为圆形

.setSquare(true); //设置图片显示为正方形

.setCrop(true).setSize(200,200); //设置大小

.setAnimation(animation); //设置动画

.setFailureDrawable(Drawable failureDrawable); //设置加载失败的动画

.setFailureDrawableId(int failureDrawable); //以资源id设置加载失败的动画

.setLoadingDrawable(Drawable loadingDrawable); //设置加载中的动画

.setLoadingDrawableId(int loadingDrawable); //以资源id设置加载中的动画

.setIgnoreGif(false); //忽略Gif图片

.setParamsBuilder(ParamsBuilder paramsBuilder); //在网络请求中添加一些参数

.setRaduis(int raduis); //设置拐角弧度

.setUseMemCache(true); //设置使用MemCache,默认true

 

4. 相关资料

?  Android xUtils3.0使用手册(二) - 数据库操作

步骤: 

(1). 创建数据表;

(2). DaoConfig 获取数据库的配置信息;

(3).  获取数据库实例:  x.getDb(daoConfig);  

(4). 数据库的增删改查。

 

1. 创建数据表

    在这里要强调的是,数据库里面表的创建的时间,只有在你对数据库里面的操作涉及到这张表的操作时,会先判断当前的表是否存在,如果不存在,才会创建一张表,如果存在,才会进行相应的CRUD操作。

Android xUtils3.0使用手册(一)- 基础功能使用
 1 @Table(name = "person") 
 2 public class person {
 3     @Column(name = "ID", isId = true, autoGen = true)
 4     public int id;
 5     @Column(name = "NAME")
 6     public String name; // 姓名
 7     @Column(name = "AGE")
 8     public int age; // 年龄
 9     @Column(name = "SEX")
10     public String sex; // 性别
11
12 @Override
13 public String toString() { 14 return "person [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]"; 15 }
16 }
Android xUtils3.0使用手册(一)- 基础功能使用

上表中包含了db相关注解:

Android xUtils3.0使用手册(一)- 基础功能使用
 1 @Check     check约束
 2 @Column    列名
 3 @Finder    一对多、多对一、多对多关系(见sample的Parent、Child中的使用)    
 4 @Foreign   外键
 5 @Id        主键,当为int类型时,默认自增。 非自增时,需要设置id的值
 6 @NoAutoIncrement  不自增
 7 @NotNull  不为空
 8 @Table    表名
 9 @Transient  不写入数据库表结构
10 @Unique     唯一约束
Android xUtils3.0使用手册(一)- 基础功能使用

注解属性

name (String)       :  表名称    
isId (boolean)      :  是否为主键
autoGen (boolean)   :  是否自增(默认: false)
proprety (String)   :  是否为空(默认: NOT NULL) 

 

2. DaoConfig 获取数据库的配置信息

Android xUtils3.0使用手册(一)- 基础功能使用
 1 //本地数据的初始化
 2 DbManager.DaoConfig daoConfig = new DbManager.DaoConfig()
 3         .setDbName("my_db.db") //设置数据库名
 4         .setDbVersion(1) //设置数据库版本,每次启动应用时将会检查该版本号,
 5         // 发现数据库版本低于这里设置的值将进行数据库升级并触发DbUpgradeListener
 6         .setAllowTransaction(true) //设置是否开启事务,默认为false关闭事务
 7         .setTableCreateListener(new DbManager.TableCreateListener() {
 8                 @Override
 9                 public void onTableCreated(DbManager dbManager, TableEntity<?> tableEntity) {
10                 }
11         })
12         .setDbOpenListener(new DbManager.DbOpenListener() {
13                 @Override
14                 public void onDbOpened(DbManager db) {
15                     // 开启WAL, 对写入加速提升巨大
16                     db.getDatabase().enableWriteAheadLogging();
17                 }
18         })
19         // 设置数据库创建时的Listener
20         .setDbUpgradeListener(new DbManager.DbUpgradeListener() {
21                 @Override
22                 public void onUpgrade(DbManager db, int oldVersion, int newVersion) {
23                     // TODO: ...
24                     // db.addColumn(...);
25                     // db.dropTable(...);
26                     // ...
27                     // or
28                     // db.dropDb();
29                 }
30         }); //设置数据库升级时的Listener,这里可以执行相关数据库表的相关修改,比如alter语句增加字段等
31         // .setDbDir(null);//设置数据库.db文件存放的目录,默认为包名下databases目录下
32             
33 DBManager db = x.getDb(daoConfig);
Android xUtils3.0使用手册(一)- 基础功能使用

 

3. 获取数据库实例

DbManager db = x.getDb(daoConfig);

 

4. 表 操作

通过DbManager这类我们可以做如下操作:

Android xUtils3.0使用手册(一)- 基础功能使用
.getDaoConfig  // 获取数据库的配置信息
.getDatabase   // 获取数据库实例  
.replace       // 只有存在唯一索引时才有用 (慎重)
.dropTable     // 删除表 
.addColumn     // 添加一列 
.dropDb        // 删除数据库
Android xUtils3.0使用手册(一)- 基础功能使用


5. 增 操作

Android xUtils3.0使用手册(一)- 基础功能使用
1 try {
2     List<person> list = new ArrayList<person>();
3     // ... 加载数据
4 
5     db.save(list); // 保存实体类或者实体类的List到数据库
6     db.saveOrUpdate(list); // 保存或更新实体类或者实体类的List到数据库,根据id对应的数据是否存在
7     db.saveBindingId(list); // 保存实体类或实体类的List到数据库,如果该类型的id是自动生成的,则保存完后会给id赋值
8 } catch (DbException e) {
9 }
Android xUtils3.0使用手册(一)- 基础功能使用

 

6. 删 操作

Android xUtils3.0使用手册(一)- 基础功能使用
1 try {
2     db.delete(person.class);//该方法是删除表中的全部数据
3     db.deleteById(person.class, 12);//该方法主要是根据表的主键(id)进行单条记录的删除
4     db.delete(person.class, WhereBuilder.b("age", ">", "20"));//根据where语句的条件进行删除操作 
5     List<person> findAll = db.selector(person.class).expr("age > 20").findAll();
6     db.delete(findAll);//根据实体bean进行对表里面的一条或多条数据进行删除   
7 } catch (DbException e) {
8 }
Android xUtils3.0使用手册(一)- 基础功能使用

 

7. 改 操作

Android xUtils3.0使用手册(一)- 基础功能使用
 1 // 第一种
 2 try {
 3     List<Person> findAll = db.findAll(Person.class);
 4     for (Person person : findAll) {
 5         person.setAge(10);
 6     }
 7     db.update(findAll, "age"); //可以使对象、集合
 8 } catch (DbException e) {
 9 }
10 // 第二种
11 try {
12     PersonTable person = db.findById(Person.class, 1);
13     person.setAge(25);
14     db.update(person, "age");
15 } catch(DbException e){
16 }
Android xUtils3.0使用手册(一)- 基础功能使用

 

8. 查 操作

Android xUtils3.0使用手册(一)- 基础功能使用
 1 try {
 2     db.findById(person.class, 1);//通过主键的值来进行查找表里面的数据
 3     db.findFirst(person.class);//返回当前表里面的第一条数据 
 4     List<person> findAll = db.findAll(person.class);//返回当前表里面的所有数据 
 5     db.findDbModelAll(new SqlInfo("select * from person where age > 25"));
 6     DbModel model = db.findDbModelFirst(new SqlInfo("select * from person where age > 25"));
 7     model.getString("age");//model相当于游标
 8     List<person> findAll2 = db.selector(person.class).expr("age >10").findAll();//主要是用来进行一些特定条件的查找
 9 } catch (DbException e) {
10 }
Android xUtils3.0使用手册(一)- 基础功能使用

 

9. 相关资料

Android xUtils3.0使用手册(一)- 基础功能使用

上一篇:ICPC Northeastern European Regional Contest 2019 Apprentice Learning Trajectory


下一篇:判断一个APP页面是原生的还是H5页面