1. xUtils简介
Github上比较火的一个安卓快速开发库.
下载地址 :https://github.com/wyouflf/xUtils
l xUtils 包含了很多实用的android工具。
l xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...
l xUitls 最低兼容android 2.2 (api level 8)
2. 注解开发方式--ViewUtils
l 完全注解方式就可以进行UI绑定和事件绑定。
l 无需findViewById和setClickListener等。
2.1. 重要对象
注解 | 对类 方法 变量 以 添加注解以后由注解处理器处理该注解 开发效率高 |
@ViewInject | 对控件变量设置指定id实例 代替findViewById |
@OnClick | 对控件添加事件 代替setOn...Listener 支持常见事件 |
@ResInject | 对数据变量设置值 代替getResource().getString(R.string.app_name) |
ViewsUtils | 使注解生效 Activity -- ViewsUtils.inject(this) Fragment --ViewUtils.inject(this,view) |
2.2. 核心代码
public class FirstMainActivity extends Activity {
@ViewInject(R.id.mybutton)
Button mybutton;
@OnClick(R.id.mybutton)
public void myButonClick(View view) {
Toast.makeText(getBaseContext(), "点了我", 0).show();
}
@ResInject(id = R.string.app_name, type = ResType.String)
String text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewUtils.inject(this);
System.out.println(mybutton);
mybutton.setText(text);
// mybutton.setOnClickListener(new OnClickListener() {
// @Override
// public void onClick(View v) {
// Toast.makeText(getBaseContext(), "点了我", 0).show();
//
// }
// });
}
}
3. 网络开发工具--HttpUtils
3.1. 重要对象
HttpUtils | 发送请求的对象 get/post/download/ 强大的地方:支持文件下载中断后,在原来位置重新下载 |
RequestCallBack | 响应数据的接收类 通过对应方法接收返回数据 onSuccess成功 onFailure失败。。。 |
3.2. get
① 配置权限
② 创建HttpUtils实例
③ 发送请求
④ 接收数据
代码
@OnClick(R.id.get)
public void get(View view) {
try {
String url = "https://www.baidu.com/";
// ① 配置权限
// ② 创建HttpUtils实例
HttpUtils http = new HttpUtils() ;
// ③ 发送请求
// http.send(请求方法, 网络地址, 数据接收对象);
http.send(HttpMethod.GET, url, new RequestCallBack<String>() {
// 失败
@Override
public void onFailure(HttpException e, String msg) {
}
// 成功
@Override
public void onSuccess(ResponseInfo<String> result) {
resultText.setText(result.result);
}
});
// ④ 接收数据
} catch (Exception e) {
e.printStackTrace();
}
}
3.3. post
登录接口
/LoginServlet 参数 username password
RequestParams | 请求参数的表单,内部含Map 可以支持编码设定 例:UTF-8 |
|
|
核心代码
3.3.1. 提交表单
HttpUtils http = new HttpUtils();
// ③ 发送请求
// http.send(请求方法, 网络地址, 请求参数表单,数据接收对象);
RequestParams form=new RequestParams("UTF-8");
form.addBodyParameter("username", "wengweng");
form.addBodyParameter("pwd", "123");
http.send(HttpMethod.POST, url,form, new RequestCallBack<String>()
3.3.2. 文件上传
/UploadFileServlet
formfile文件接收字段
// http.send(请求方法, 网络地址, 请求参数表单,数据接收对象);
RequestParams form = new RequestParams("UTF-8");
form.addBodyParameter("formfile", new File("mnt/sdcard/temp.apk"));
http.send(HttpMethod.POST, url, form, new RequestCallBack<String>()
注意事项:可以重写onLoading方法提高用户体验
//读取中
@Override
public void onLoading(long total, long current, boolean isUploading) {
// TODO Auto-generated method stub
super.onLoading(total, current, isUploading);
String currValue = Formatter.formatFileSize(getBaseContext(), current);
String totalValue = Formatter.formatFileSize(getBaseContext(), total);
resultText.setText(currValue + "/" + totalValue);
}
3.4. download
注意事项建议重写onLoading方法获取下载进度
① 配置权限
② 创建HttpUtils对象
③ 打开下载方法
④ 保存下载控制器
核心代码
private HttpHandler<File> handler;
@OnClick(R.id.download)
public void download(View view) {
try {
// ① 配置权限
// ② 创建HttpUtils对象
HttpUtils http = new HttpUtils();
// ③ 打开下载方法
// http.download(文件的网络地址, 保存位置,是否支持续传,自动重命名:如果传回文件名, 数据接收对象);
String url = "http://192.168.1.102:8080/web/WiFiKeyPC.zip";
String path = "mnt/sdcard/WiFiKeyPC.zip";
handler = http.download(url, path, true, false, new RequestCallBack<File>() {
@Override
public void onLoading(long total, long current, boolean isUploading) {
super.onLoading(total, current, isUploading);
String currValue = Formatter.formatFileSize(getBaseContext(), current);
String totalValue = Formatter.formatFileSize(getBaseContext(), total);
resultText.setText(currValue + "/" + totalValue);
}
@Override
public void onSuccess(ResponseInfo<File> responseInfo) {
resultText.setText("下载成功保存在" + responseInfo.result.getAbsolutePath());
}
@Override
public void onFailure(HttpException error, String msg) {
resultText.setText("下载失败"+msg);
}
});
// ④ 保存下载控制器
} catch (Exception e) {
e.printStackTrace();
}
}
下载中断
HttpHandler | 支持 任务取消 |
@OnClick(R.id.pause)
public void pause(View view) {
if (!handler.isCancelled()) {
Toast.makeText(getBaseContext(), "暂停下载", 0).show();
handler.cancel();
}
}
4. 网络图片异步加载工具--BitmapUtils
4.1. 重要对象
BitmapUtils | 图片加载工具 加载 网络 本地 asset目录 的图片 |
① 创建BitmapUtils对象
② 给指定ImageView控件加载图片
核心代码
// String imageUrl =
// "http://images.51cto.com/files/uploadimg/20130322/1724296.png";
// String imageUrl = "assets/tt.jpg";
String imageUrl = "/mnt/sdcard/tt.jpg";
// ① 创建BitmapUtils对象
// BitmapUtils bitmapUtils=new BitmapUtils(上下文, 保存路径);
BitmapUtils bitmapUtils = new BitmapUtils(this, "mnt/sdcard/");
// ② 给指定ImageView控件加载图片
// bitmapUtils.display(控件, 资源地址,载入参数获取对象)
//注意事项1.display需要指定 显示的ImageView控件 2.通过onLoadCompleted方法获取Bitmap设置给ImageView
//3. sd卡必须以 /开头 asset 不要/开头
bitmapUtils.display(image, imageUrl, new BitmapLoadCallBack<View>() {
@Override
public void onLoadCompleted(View container, String uri, Bitmap bitmap, BitmapDisplayConfig config, BitmapLoadFrom from) {
image.setImageBitmap(bitmap);
}
@Override
public void onLoadFailed(View container, String uri, Drawable drawable) {
}
});
5. ORM数据库工具类DbUtils
概念
ORM即对象关系映射(Object-Relational Mapping),在对象与表之间建议对应关系
将sql封装起来,封装了sql的编写,开发者大量减少sql编写,感觉像在操作集合
5.1. 重要对象
Dbutils | 核心对象。支持对象的CRUD |
5.2. 增删改
@OnClick(R.id.insert)
public void insert(View view) {
// ① 创建DbUtils对象
DbUtils db = DbUtils.create(this);
for (int i = 0; i < 20; i++) {
User u = new User();
u.id = i;
u.name = "黑马程序员";
u.age = 12;
u.email = "黑马@itcast.cn";
// ② 保存多条记录
try {
db.save(u);
} catch (DbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@OnClick(R.id.delete)
public void delete(View view) {
// ① 创建DbUtils对象
DbUtils db = DbUtils.create(this);
try {
db.deleteById(User.class, "1");
} catch (DbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@OnClick(R.id.update)
public void update(View view) {
// 先查找出一条记录 修改值 后给update并指明修改属性
// ① 创建DbUtils对象
DbUtils db = DbUtils.create(this);
try {
User u = db.findById(User.class, "0");
u.name = "1万2就业";
db.update(u, "name");
} catch (DbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
5.3. 查询与高级查询
Selector | 数据筛选对象,具体负责条件语句 例 WHERE id<54 AND (age>20 OR age<30) ORDER BY id LIMIT pageSize OFFSET pageOffset |
WhereBuilder | where拼接条件 |
@OnClick(R.id.query)
public void query(View view) {
// ① 创建DbUtils对象
DbUtils db = DbUtils.create(this);
try {
// 全查
List<User> users = db.findAll(User.class);// 查询所有
println(users);
// User u = db.findFirst(条件对象);
// User u = db.findFirst(Selector.from(User.class).where("name",
// "=", "黑马程序员")); //条件查询
// User u = db.findFirst(Selector.from(User.class).where("name",
// "!=", null));//非空查询
// User u = db.findFirst(Selector.from(User.class).where("name",
// "=", null));// 空查询
// System.out.println(u);
} catch (DbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//高级查询
@OnClick(R.id.query2)
public void query2(View view) {
// ① 创建DbUtils对象
DbUtils db = DbUtils.create(this);
try {
// 全查
List<User> users = db.findAll(User.class);// 查询所有
println(users);
System.out.println("Selector高级查询");
// 条件查询Selector
List<User> users2 = db.findAll(Selector.from(User.class)//
.where(WhereBuilder.b("id", "<", "10"))// where条
.or(WhereBuilder.b("id", ">", "15")// or
).orderBy("id")// orderby
.limit(3)// limit
.offset(3)// offset 返回值开始位置 下标0代表第一条
);
println(users2);
} catch (DbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
6. 混淆时注意事项
添加Android默认混淆配置${sdk.dir}/tools/proguard/proguard-android.txt
不要混淆xUtils中的注解类型,添加混淆配置:-keep class * extends java.lang.annotation.Annotation { *; }
对使用DbUtils模块持久化的实体类不要混淆,或者注解所有表和列名称@Table(name="xxx"),@Id(column="xxx"),@Column(column="xxx"),@Foreign(column="xxx",foreign="xxx");