xUtils的学习

安卓快速开发库:提高开发效率-xUtils
 

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 无需findViewByIdsetClickListener等。

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, truefalsenew 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")

代码位置【http://pan.baidu.com/s/1pJuUQXd

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值