XUtils3框架
框架简介
开源地址 https://github.com/wyouflf/xUtils3/tree/master
- xUtils 包含了很多实用的android工具.
- xUtils 支持超大文件(超过2G)上传,更全面的http请求协议支持(11种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响…
- xUtils 最低兼容Android 4.0
- xUtils3:
1.HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略.
2.支持标准的Cookie策略, 区分domain, path
3.事件注解去除不常用的功能, 提高性能.
4.数据库api简化提高性能, 达到和greenDao一致的性能.
5.图片绑定支持gif(受系统兼容性影响, 部分gif文件只能静态显示), webp; 支持圆角, 圆形, 方形等裁剪, 支持自动旋转
使用前配置
项目导入
compile 'org.xutils:xutils:3.3.36'
需要的权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
初始化
// 在application的onCreate中初始化
@Override
public void onCreate() {
super.onCreate();
x.Ext.init(this);
x.Ext.setDebug(BuildConfig.DEBUG); // 是否输出debug日志, 开启debug会影响性能.
...
}
使用举例
XUtils3一共有4大功能:注解模块,网络模块,图片加载模块,数据库模块
viewUtils:用来代替findViewbyId,也可以用来给控件添加点击事件
// 使用ViewUtils绑定控件
@ViewInject(R.id.radioGroup)
private RadioGroup rg;
@ViewInject(R.id.imgv)
private ImageView imgv;
@ViewInject(R.id.txtv1)
private TextView txtv;
// ViewUtils支持绑定点击事件
@OnClick(R.id.btn)
public void btnShow(View view) {}
/**
* 1. 方法必须私有限定,
* 2. 方法参数形式必须和type对应的Listener接口一致.
* 3. 注解参数value支持数组: value={id1, id2, id3}
* 4. 其它参数说明见{@link org.xutils.event.annotation.Event}类的说明.
**/
@Event(value = R.id.btn_test_baidu1,
type = View.OnClickListener.class/*可选参数, 默认是View.OnClickListener.class*/)
private void onTestBaidu1Click(View view) {
...
}
//记得在Activity的oncreate方法里面写上下面的代码:
// 注入绑定事件
ViewUtils.inject(this);
- HttpUtils:访问网络
//用来上传文件,下载文件
HttpUtils hUtils = new HttpUtils(5 * 1000);
hUtils.send(HttpMethod.GET, "http://blog.csdn.net/qq379454816",
new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
txtv.setText(responseInfo.result);
}
@Override
public void onFailure(HttpException error, String msg) {
txtv.setText(error.getMessage() + "," + msg);
}
});
//HttpUtlis的使用
@Event(value = R.id.btn_test_baidu2)
private void onTestBaidu2Click(View view) {
RequestParams params = new RequestParams("https://www.baidu.com/s");
params.setSslSocketFactory(...); // 设置ssl
params.addQueryStringParameter("wd", "xUtils");
x.http().get(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
Toast.makeText(x.app(), result, Toast.LENGTH_LONG).show();
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onCancelled(CancelledException cex) {
Toast.makeText(x.app(), "cancelled", Toast.LENGTH_LONG).show();
}
@Override
public void onFinished() {
}
});
}
- DbUtils使用数据库
//先建一个类,用来生成数据库中的表
@Table(name = "info")
public class StudentInfo {
@Column(name = "id", isId = true)
private int id;
@Column(name = "name")
private String name;
@Column(name = "age")
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//使用DbUtils
DbManager.DaoConfig daoConfig = new DaoConfig()
// 数据库的名字
.setDbName("SudentInfo")
// 保存到指定路径
// .setDbDir(new
// File(Environment.getExternalStorageDirectory().getAbsolutePath()))
// 数据库的版本号
.setDbVersion(1)
// 数据库版本更新监听
.setDbUpgradeListener(new DbUpgradeListener() {
@Override
public void onUpgrade(DbManager arg0, int arg1, int arg2) {
LogUtil.e("数据库版本更新了!");
}
});
DbManager manager = x.getDb(daoConfig);
try {
//创建对象,用来生成表
StudentInfo info = new StudentInfo();
info.setAge(16);
info.setName("小花");
//创建表
manager.saveOrUpdate(info);
} catch (DbException e) {
e.printStackTrace();
}
//dBUtils:用来操作数据库
//创建数据库
DbUtils dUtils = DbUtils.create(MainActivity.this, "Student");
try {
//创建表,表名为包名_StudentInfo
dUtils.createTableIfNotExist(StudentInfo.class);
} catch (DbException e) {
e.printStackTrace();
}
- BitmapUtils绑定图片
// 设置加载图片的参数
ImageOptions imageOptions = new ImageOptions.Builder()
// 是否忽略GIF格式的图片
.setIgnoreGif(false)
// 图片缩放模式
.setImageScaleType(ScaleType.CENTER_CROP)
// 下载中显示的图片
.setLoadingDrawableId(R.drawable.ic_launcher)
// 下载失败显示的图片
.setFailureDrawableId(R.drawable.ic_launcher)
// 得到ImageOptions对象
.build();
x.image().bind(imageView, url, imageOptions);
// assets file
x.image().bind(imageView, "assets://test.gif", imageOptions);
// local file
x.image().bind(imageView, new File("/sdcard/test.gif").toURI().toString(), imageOptions);
x.image().bind(imageView, "/sdcard/test.gif", imageOptions);
x.image().bind(imageView, "file:///sdcard/test.gif", imageOptions);
x.image().bind(imageView, "file:/sdcard/test.gif", imageOptions);
//带回调
x.image().bind(imageView, url, imageOptions, new Callback.CommonCallback<Drawable>() {...});
x.image().loadDrawable(url, imageOptions, new Callback.CommonCallback<Drawable>() {...});
x.image().loadFile(url, imageOptions, new Callback.CommonCallback<File>() {...});
//加载ImageView的图片资源,可以加载本地、网络
BitmapUtils bUtils = new BitmapUtils(this); bUtils.display(imageView,"http://image.tianjimedia.com/uploadImages/2013/221/JGR58NXB5V62.jpg");
- log的使用
//设置是否允许输出对应级别的,false为不输出
LogUtils.allowE=false;
//以error的形式输出日志
LogUtils.e("ViewUtils调用成功!");