xUtils解析

1. xUtils简介

Github上比较火的一个安卓快速开发库.

下载地址 :https://github.com/wyouflf/xUtils

xUtils 包含了很多实用的android工具。

xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响…

xUitls 最低兼容android 2.2 (api level 8)

2. 注解开发方式–ViewUtils

完全注解方式就可以进行UI绑定和事件绑定。
无需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

xUtils解析_第1张图片

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() {

// 失败

@Override

public void onFailure(HttpException e, String msg) {

}

// 成功

@Override

public void onSuccess(ResponseInfo 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() 

注意事项:可以重写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方法获取下载进度

  1. 配置权限

  2. 创建HttpUtils对象

  3. 打开下载方法

  4. 保存下载控制器

private HttpHandler 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() {

@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 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目录 的图片

xUtils解析_第2张图片

  1. 创建BitmapUtils对象
  2. 给指定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() {

@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编写,感觉像在操作集合
xUtils解析_第3张图片

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 = "测试"+i;

u.age = 12;

u.email = "[email protected]";

// ② 保存多条记录

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 = "曹操";

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 pageOffs
WhereBuilder where拼接条件
@OnClick(R.id.query)

public void query(View view) {

// ① 创建DbUtils对象

DbUtils db = DbUtils.create(this);

try {

// 全查

List 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 users = db.findAll(User.class);// 查询所有

println(users);

System.out.println("Selector高级查询");

// 条件查询Selector

List 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”);

你可能感兴趣的:(Android开源项目)