XUtils使用详解
- 一. XUtils是什么?
- 简介
- 使用前配置
- 二.XUtils加载图片
- ImageOption
- 加载网络图片
- 加载Android资源图片
- 加载sd卡图片
- 三.XUtils请求网络
- RequestParams
- get请求
- post请求
- 四.使用总结
一. XUtils是什么?
简介
xUtils 包含了orm, http(s), image, view注解, 但依然很轻量级(251K), 并且特性强大, 方便扩展.
- orm: 高效稳定的orm工具, 使得http接口实现时更方便的支持cookie和缓存.
灵活的, 类似linq表达式的接口.和greenDao一致的性能. - http(s): 基于UrlConnection, Android4.4以后底层为okHttp实现.
请求协议支持11种谓词: GET,POST,PUT,PATCH,HEAD,MOVE,COPY,DELETE,OPTIONS,TRACE,CONNECT
支持超大文件(超过2G)上传
支持断点下载(如果服务端支持Range参数,客户端自动处理断点下载)
支持cookie(实现了domain, path, expiry等特性)
支持缓存(实现了Cache-Control, Last-Modified, ETag等特性, 缓存内容过多时使用过期时间+LRU双重机制清理)
支持异步和同步(可结合RxJava使用)调用 - image: 有了http(s)及其下载缓存的支持, image模块的实现相当的简洁.
支持内存缓存, 磁盘缓存(缩略图和原图), 并且支持回收被view持有, 但被MemCache移除的图片, 减少页面回退时的闪烁.
支持在ListView滑动时, 自动停止被回收复用的item对应的下载任务(再次下载时断点续传)
支持webp, gif(部分比较老的系统只展示静态图)
支持圆角, 圆形, 方形等裁剪, 支持自动旋转… - view注解: view注解模块仅仅400多行代码却灵活的支持了各种View注入和事件绑定.
事件注解支持且不受混淆影响…(参考sample的混淆配置)
支持绑定拥有多个方法的listener
使用前配置
需要的权限
<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会影响性能.
...
}
AndroidManifest.xml文件application 节点里添加
android:requestLegacyExternalStorage="true"
android:usesCleartextTraffic="true"
在使用注解的地方需要绑定
x.view().inject(this);//没有用到view注解可以先不用
二.XUtils加载图片
ImageOption
ImageOption是xutils中的一个类,我们在加载图片时如果对加载的图片做一些处理,比如设置大小和圆角,可以通过ImageOption来进行处理。
private ImageOptions getImageOptions(){
ImageOptions imageOptions = new ImageOptions.Builder()
.setSize(DensityUtil.dip2px(120), DensityUtil.dip2px(120))//设置大小
.setRadius(DensityUtil.dip2px(30))//设置圆角半径
.setCrop(true)//如果ImageView的大小不是定义为wrap_content, 不要crop
.setImageScaleType(ImageView.ScaleType.CENTER_CROP)
.setLoadingDrawableId(R.drawable.ic_launcher_background)//加载中显示
.setFailureDrawableId(R.drawable.ic_launcher_foreground)//失败时显示
.build();
//建造者设计模式
return imageOptions;
}
加载网络图片
1.简单加载
imageOptions = getImageOptions();
x.image().bind(imageView, "https://cdn.xiaoz.me/wp-content/uploads/2018/12/shibie_600.jpg");
2.带有回调的加载
imageOptions = getImageOptions();
x.image().bind(imageView, "https://img0.utuku.china.com/640x0/news/20200517/734aa0ad-2843-4073-b370-f168fd56bc38.jpg", new Callback.CommonCallback<Drawable>() {
@Override
public void onSuccess(Drawable result) {
showToast("图片加载成功");
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
showToast("网址错误");
}
@Override
public void onCancelled(CancelledException cex) {
showToast("图片加载取消");
}
@Override
public void onFinished() {
showToast("图片加载结束");
}
});
3.带有缓存回调的图片加载
x.image().bind(imageView, "https://img0.utuku.china.com/640x0/news/20200517/734aa0ad-2843-4073-b370-f168fd56bc38.jpg", new Callback.CacheCallback<Drawable>() {
@Override
public boolean onCache(Drawable result) {
return true;
}
@Override
public void onSuccess(Drawable result) {
showToast("图片加载成功");
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
showToast("网址错误");
}
@Override
public void onCancelled(CancelledException cex) {
showToast("图片加载取消");
}
@Override
public void onFinished() {
showToast("图片加载结束");
}
});
加载Android资源图片
1.加载assert目录下的资源
x.image().bind(imageView, "assets://test.gif", imageOptions);
2.加载res/drawable目录下资源
x.image().bind(imageView, "res://"+R.drawable.test);
加载sd卡图片
加载sd卡图片
x.image().bind(imageView, "file:///sdcard/Pictures/pic/photo.png");
三.XUtils请求网络
RequestParams
RequestParam同样是xutils中的一个类,我们可以在构造函数中传入url
RequestParams params = new RequestParams("http://xxxx:8080/user/login");
如果需要携带参数,可以通过下列方式添加
params.addBodyParameter("userAccount", "1001");
params.addBodyParameter("userPwd", "123456");
get请求
x.http().get(params, new Callback.CacheCallback<String>() {.....})
post请求
同步请求(阻塞主线程,不建议使用)
x.http().postSync(params, String.class);
异步请求
RequestParams params = new RequestParams("http://1xxxx:8080/user/login");
params.addBodyParameter("userAccount", "1001");
params.addBodyParameter("userPwd", "123456");
x.http().post(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
Log.d("xutils", "success");
JSONObject json = JSON.parseObject(result);
if(json.getString("res").equals("success")){
showToast("登录成功");
}else{
showToast("登录失败");
}
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
showToast("网址错误或者网络不可用");
}
@Override
public void onCancelled(CancelledException cex) {
showToast("登录被取消");
}
@Override
public void onFinished() {
Log.d("xutils", "finish");
showToast("OnFinish最后被回调");
}
});
四.使用总结
最后,还有关于数据库的操作没有谈到,可以参考这篇博客
Android xUtils框架最全使用详解
个人使用感受:Xutils使用方便,集合了几种框架于一体,至少结合了Okhttp + Glide + ButterKnife+GreenDAO.是一款非常不错的框架,强推。Xutils的源码也写的比较容易看懂,建议大家阅读。
最后30s向大家推荐一个小白获取资源的绝佳场所,对,你只需要白嫖!
群号:705884058