序言:
作为一个职业的程序猿,不会像新手一样把每一个需要实现的功能每次重写一遍,因为程序猿能熟练的使用各种第三方类库。
毕竟人类因为会使用工具才站到了食物链顶端。
现在就让我们学习使用xUtils类库 中的四个工具类
开源代码来自于:https://github.com/wyouflf/xUtils
-------------------------------------------------------------------------------------------------------------------
xUtils简介
- xUtils 包含了很多实用的android工具。
- xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...
- xUitls 最低兼容android 2.2 (api level 8)
xUtils权限:
1、联网权限
2、外部存储写入权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
--------------------------------------------------------------------------------------------------------------------
一、BitmapUtils 图像工具类
功能:
加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
支持加载网络图片和本地图片;
内存管理使用lru算法,更好的管理bitmap内存;
可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...
加载图片
1 BitmapUtils bitmapUtils = new BitmapUtils(this);
2
3 // 加载网络图片 第一个参数:如果是ImageView控件,则显示图片,否则显示为背景,第二个参数图片网络地址
4 bitmapUtils.display(testImageView, "http://bbs.lidroid.com/static/image/common/logo.png");
5
6 // 加载本地图片(路径以/开头, 绝对路径)
7 bitmapUtils.display(testImageView, "/sdcard/test.jpg");
8
9 // 加载assets中的图片(路径以assets开头)
10 bitmapUtils.display(testImageView, "assets/img/wallpaper.jpg");
加载网络图片时
bitmapUtils.display(testImageView, "http://bbs.lidroid.com/static/image/common/logo.png");
对应display()方法 还有一个三个参数的方法
前两个参数不变,第三个参数为BitmapDisplayConfig对象,用于设置图片的配置
eg:
1 BitmapDisplayConfig displayConfig = new BitmapDisplayConfig();
2 displayConfig.setLoadFailedDrawable(Drawable)
3 设置加载失败的图片
4 displayConfig.setLoadingDrawable(Drawable)
5 设置加载中的图片
6 displayConfig.setAutoRotation(boolean)
7 有些JPEG图片,图片自身需要旋转才可以正常显示的情况,
8 来进行设置是否自动支持旋转
9 displayConfig.setAnimation(Animation)
10 用于实现要加载的View的显示动画,可用于ListView中
1 BitmapDisplayConfig displayConfig = new BitmapDisplayConfig();
2 //设置加载中的图片
3 Resources resources = getResources();
4 displayConfig.setLoadingDrawable(resources.getDrawable(R.drawable.ic_launcher));
5 //设置加载失败的图片
6 displayConfig.setLoadFailedDrawable(resources.getDrawable(android.R.drawable.ic_delete));
7 //设置Bitmap像素的配置
8 displayConfig.setBitmapConfig(Bitmap.Config.ARGB_8888);
9 //设置内存中Bitmap最大的像素尺寸,减少内存占用
10 BitmapSize size = new BitmapSize(100,50);
11 displayConfig.setBitmapMaxSize(size);
12 //设置图片加载成功之后 到最终图片显示完成之间的动画效果
13 displayConfig.setAnimation(animation);
14
15 bitmapUtils.display(imageView, url,displayConfig);
BitmapUtils默认配置设置
以上的使用可以看出每当我们要加载一个图片的时候,都需要设置该图片的一些配置
而xUtils给我们提供了默认设置,即只要设置属性一次即可
使用方法为:使用BitmapUtils 的 configDefaultXxxx()格式的方法
eg. 设置默认配置,加载三个网络图片,则该三个图片的属性是一样的
BitmapUtils bitmapUtils = new BitmapUtils(this);
//设置默认的加载中的图片
bitmapUtils.configDefaultLoadingImage(R.drawable.ic_launcher);
//设置默认的加载失败的图片
bitmapUtils.configDefaultLoadFailedImage(android.R.drawable.ic_delete);
//设置默认的图片尺寸
bitmapUtils.configDefaultBitmapMaxSize(new BitmapSize(100,50));
//设置默认的加载超时时间
bitmapUtils.configDefaultConnectTimeout(2000);
//加载第一张图片
bitmapUtils.display(imageView1, url_1);
//加载第二张图片
bitmapUtils.display(imageView2, url_2);
//加载第三张图片
bitmapUtils.display(imageView3, url_3);
--------------------------------------------------------------------------------------------------------------------
二、ViewUtils视图相关工具类
功能:
- android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
- 新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
- 目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event
1、注解
(1)关于注解:
1 //在Activity中注入:
2 @Override
3 public void onCreate(Bundle savedInstanceState) {
4 super.onCreate(savedInstanceState);
5 setContentView(R.layout.main);
6 ViewUtils.inject(this); //注入view和事件
7 ...
8 textView.setText("some text...");
9 ...
10 }
11 //在Fragment中注入:
12 @Override
13 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
14 View view = inflater.inflate(R.layout.bitmap_fragment, container, false); // 加载fragment布局
15 ViewUtils.inject(this, view); //注入view和事件
16 ...
17 }
18 //在PreferenceFragment中注入:
19 public void onActivityCreated(Bundle savedInstanceState) {
20 super.onActivityCreated(savedInstanceState);
21 ViewUtils.inject(this, getPreferenceScreen()); //注入view和事件
22 ...
23 }
(2)xUtils视图注解的应用
eg:
// xUtils的view注解要求必须提供id,以使代码混淆不受影响。
@ViewInject(R.id.textView)
TextView textView;
@ResInject(id = R.string.label, type = ResType.String)
private String label;
// 取消了之前使用方法名绑定事件的方式,使用id绑定不受混淆影响
// 支持绑定多个id @OnClick({R.id.id1, R.id.id2, R.id.id3})
// or @OnClick(value={R.id.id1, R.id.id2, R.id.id3}, parentId={R.id.pid1, R.id.pid2, R.id.pid3})
// 更多事件支持参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
@OnClick(R.id.test_button)
public void testButtonClick(View v) { // 方法签名必须和接口中的要求一致
...
}
--------------------------------------------------------------------------------------------------------------------
三、DbUtils 数据库相关工具类
功能:
- android中的orm框架,一行代码就可以进行增删改查;
- 支持事务,默认关闭;
- 可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
- 支持绑定外键,保存实体时外键关联实体自动保存或更新;
- 自动加载外键关联实体,支持延时加载;
- 支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
使用步骤:
1、编写实体类
![](https://yqfile.alicdn.com/img_1c53668bcee393edac0d7b3b3daff1ae.gif?x-oss-process=image/resize,w_1400/format,webp)
![](https://yqfile.alicdn.com/img_405b18b4b6584ae338e0f6ecaf736533.gif?x-oss-process=image/resize,w_1400/format,webp)
1 package com.xqxapp.finance.bean;
2
3 import android.graphics.Bitmap;
4 import com.lidroid.xutils.db.annotation.Column;
5 import com.lidroid.xutils.db.annotation.Id;
6 import com.lidroid.xutils.db.annotation.Table;
7
8 /**
9 * Created
10 * Author: xqx
11 * Date: 15-10-9
12 */
13 @Table(name = "account")
14 public class Account {
15
16 @Id
17 private long _id;
18 @Column
19 private int money_type; //类型:支出/收入
20 @Column
21 private float money; //金额
22 @Column
23 private String type; //支出用途/收入来源
24 @Column
25 private String way; //金额类型:现金 支付宝。。。
26 @Column
27 private String remarks; //备注
28 @Column
29 private String time; //时间
30 @Column
31 private String people; //群体
32
33
34 private Bitmap image; //存单
35
36
37 public long getId() {
38 return _id;
39 }
40
41 public void setId(long id) {
42 this._id = id;
43 }
44
45 public int getMoney_type() {
46 return money_type;
47 }
48
49 public void setMoney_type(int money_type) {
50 this.money_type = money_type;
51 }
52
53 public float getMoney() {
54 return money;
55 }
56
57 public void setMoney(float money) {
58 this.money = money;
59 }
60
61 public String getType() {
62 return type;
63 }
64
65 public void setType(String type) {
66 this.type = type;
67 }
68
69 public String getWay() {
70 return way;
71 }
72
73 public void setWay(String way) {
74 this.way = way;
75 }
76
77 public String getRemarks() {
78 return remarks;
79 }
80
81 public void setRemarks(String remarks) {
82 this.remarks = remarks;
83 }
84
85 public String getTime() {
86 return time;
87 }
88
89 public void setTime(String time) {
90 this.time = time;
91 }
92
93 public String getPeople() {
94 return people;
95 }
96
97 public void setPeople(String people) {
98 this.people = people;
99 }
100
101 public Bitmap getImage() {
102 return image;
103 }
104
105 public void setImage(Bitmap image) {
106 this.image = image;
107 }
108 }
2、DbUtils的创建
1 DbUtils.create(this,app.db);
参数一:上下文 参数二:数据文件名
3、添加记录
Account account = new Account();
account.setMoney(Float.parseFloat(et_money.getText().toString()));
account.setMoney_type(MONEY_TYPE);
account.setPeople("");
account.setRemarks("");
account.setTime(time.getText().toString());
account.setType("");
account.setWay(way.getText().toString());
DbUtils.save(account)
--------------------------------------------------------------------------------------------------------------------
四、HttpUtils 网络相关工具类
功能:
- 支持同步,异步方式的请求;
- 支持大文件上传,上传大文件不会oom;
- 支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
- 下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
- 返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。
1、Get异步请求数 HttpUtils httpUtils = new HttpUtils(5000,"xxx[Android]");
//第一个参数,连接超时时间 ,第二个参数 userAgent 客户端标识,可以随便写
//2、联网
httpUtils.send(HttpRequest.HttpMethod.GET,
"http://www.baidu.com",
new RequestCallBack<String>() {
//请求成功时回调
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
// 请求数据成功后的操作
}
//请求失败时回调
@Override
public void onFailure(HttpException e, String s) {
//请求数据失败后的操作
}
});
2、Get 同步请求数据
try {
ResponseStream responseStream = httpUtils.sendSync(HttpRequest.HttpMethod.GET, "http://www.163.com"
);
int statusCode = responseStream.getStatusCode();
if(statusCode==200){
//进行数据的操作
}
}
responseStream.close();
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
3、Post 上传
HttpUtils httpUtils = new HttpUtils(5000);
//POST请求的参数准备
//按参数提交数据
//参数的提交需要指定编码:也就是new RequestParams("字符编码");
//服务器 需要什么编码,客户端就要设置对应的编码
// 指定字符编码
RequestParams params = new RequestParams("UTF-8");
//1、设置参数 POST 内容 //在网址之后自动加入http://11.1.163.24:8080/post?a=123
params.addQueryStringParameter("a","123");
//POST 请求大部分都需要BodyParameter
params.addBodyParameter("name","admin");
params.addBodyParameter("password", "123456");
//1.1 如果需要附加http头字段 ,
params.addHeader("User-Agent","Zhang Sir");
httpUtils.send(
HttpRequest.HttpMethod.POST, //post方式
"http://11.1.163.24:8080/post", //网址接口
params,
new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
txtInfo.setText(responseInfo.result);
}
@Override
public void onFailure(HttpException e, String s) {
txtInfo.setText("请求失败");
}
}
);
4、下载
HttpUtils httpUtils = new HttpUtils(5000);
//1、下载文件
//获取存储卡路径
String state = Environment.getExternalStorageState();
//判断是否挂载成功
if(Environment.MEDIA_MOUNTED.equals(state)) {
File root = Environment.getExternalStorageDirectory();
//目标文件对象
File targetFile = new File(root,"xmly1.apk");
//进行文件的下载
HttpHandler<File> download = httpUtils.download("http://11.1.163.24:8080/ximalayatingshu_64.apk",
targetFile.getAbsolutePath(), //保存路径
true, //autoResume 是否断点续传,false 则可以重命名下载,true 则下载成功的不再下载,执行下载失败接口回调
true, //autoRename 自动重命名
new RequestCallBack<File>() { //回调
@Override
public void onSuccess(ResponseInfo<File> responseInfo) {
//返回下载成功的File对象
Toast.makeText(getApplicationContext(), "success", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(HttpException e, String s) {
Toast.makeText(getApplicationContext(), "failure", Toast.LENGTH_SHORT).show();
}
/**
* 当前网络请求:上传下载的进度的更新回调
* @param total 总长度
* @param current 当前进度
* @param isUploading 是否上传 true上传 false 下载
*/
@Override
public void onLoading(long total, long current, boolean isUploading) {
super.onLoading(total, current, isUploading);
//TODO 更新进度条
}
}
);
}
-------------------------------------------------------------------------------------------------------------------
关于开源代码作者
- Email: wyouflf@qq.com, wyouflf@gmail.com
- 有任何建议或者使用中遇到问题都可以给我发邮件, 你也可以加入QQ群:330445659(已满), 275967695, 257323060,技术交流,idea分享 _