【Android】XUtils——你值得拥有!
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>() {@Overridepublic void onSuccess(Drawable result) {showToast("图片加载成功");}@Overridepublic void onError(Throwable ex, boolean isOnCallback) {showToast("网址错误");}@Overridepublic void onCancelled(CancelledException cex) {showToast("图片加载取消");}@Overridepublic 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>() {@Overridepublic boolean onCache(Drawable result) {return true;}@Overridepublic void onSuccess(Drawable result) {showToast("图片加载成功");}@Overridepublic void onError(Throwable ex, boolean isOnCallback) {showToast("网址错误");}@Overridepublic void onCancelled(CancelledException cex) {showToast("图片加载取消");}@Overridepublic 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>() {@Overridepublic void onSuccess(String result) {Log.d("xutils", "success");JSONObject json = JSON.parseObject(result);if(json.getString("res").equals("success")){showToast("登录成功");}else{showToast("登录失败");}}@Overridepublic void onError(Throwable ex, boolean isOnCallback) {showToast("网址错误或者网络不可用");}@Overridepublic void onCancelled(CancelledException cex) {showToast("登录被取消");}@Overridepublic void onFinished() {Log.d("xutils", "finish");showToast("OnFinish最后被回调");}});
四.使用总结
最后,还有关于数据库的操作没有谈到,可以参考这篇博客
Android xUtils框架最全使用详解
个人使用感受:Xutils使用方便,集合了几种框架于一体,至少结合了Okhttp + Glide + ButterKnife+GreenDAO.是一款非常不错的框架,强推。Xutils的源码也写的比较容易看懂,建议大家阅读。
最后30s向大家推荐一个小白获取资源的绝佳场所,对,你只需要白嫖!
群号:705884058
【Android】XUtils——你值得拥有!相关推荐
- android xUtils的使用
gethub地址:https://github.com/wyouflf/xUtils/ xUtils简介 xUtils 包含了很多实用的android工具. xUtils 支持大文件上传,更全面的ht ...
- android xUtils 2.6.14 jar 下载 使用 和混淆
一.ViewUtils 你受够了重复冗长的findViewById了嘛?你受够了各种监听事件的绑定了嘛?在这里,你只需要一句注解,如@ViewInject.@OnClick,就能轻松摆脱小白似的代码, ...
- android xutils框架缓存图片,xUtils框架的使用
xUtils简介 xUtils 包含了很多实用的android工具,xUtils 源于Afinal框架,对Afinal进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持,拥有 ...
- Android xUtils框架解析
xUtils简介 xUtils是基于Afinal开发的目前功能比较完善的一个Android开源框架,最近又发布了xUtil3.0,在增加新功能的同时又提高了框架的性能,下面来看看官方(https:// ...
- android xutils json请求,Android Xutils3网络请求的封装详解及实例代码
Xutils3网络请求的封装详解 封装了一个Xutil3的网络请求工具类,分享给大家,本人水平有限,不足之处欢迎指出. 使用前先配置xutils3: 1.gradle中添加 compile 'org. ...
- Android Xutils和Xutils3的基本使用
这几天把公司的电商软件第一版完成之后,打算把项目重新优化并排版一下,让软件整体看起来更加美观.作为一名优(lan)雅(duo)的程序猿,一定要时刻保持优雅的情操,比如FindViewById()和Se ...
- android xutils 教程,Android AS为xutils添加依赖过程图解
在使用xutils时遇到不能添加以来的问题,花了很长时间终于解决,网上添加依赖的方法很多,在此针对个人出现的问题作下笔记. 我本想使用jar包,因为在使用smartImageView时是用的jar包来 ...
- android xutils数据库操作,XUtils3.0之本地数据库操作
5](http://mvnrepository.com/)找到对应的版本 compile 'org.xutils:xutils:3.0' -->build project Paste_Image ...
- android xutils json请求,Android中的xutils框架在访问服务器时如何携带json数据
xutils框架的httputils在访问服务器时如何像HttpURLConnection一样携带json数据 HttpURLConnection携带数据的案例,使用put请求: URL url; H ...
最新文章
- 33 张图详解 RSTP 、MSTP、替代技术
- finereport连接oracle_FINEREPORT连接远程ORACLE数据库
- SQLServer 常见高CPU利用率原因
- 英特尔cpu发布时间表_10纳米来了:英特尔十一代酷睿上市,性能提升20%,AI算力乘5倍...
- 20141203图片Base64编码与解码
- Confluence 6 使用 Apache 和 mod_proxy 添加 SSL和其他
- centos7 网卡配置vlan_CentOS7网卡创建vlan步骤
- 二叉树的几种遍历方法
- 20101022网站更新部署
- 第三章:3.4 处理登陆的请求
- 38.Linux/Unix 系统编程手册(下) -- 编写安全的特权程序
- JUC与JVM并发编程学习笔记02
- linux go missing git command,go: missing Git command的解决办法
- 万年历打印Java_java实验之打印万年历
- XTTS V4.3 跨平台迁移12.1.2 HPUX ->Oracle Linux
- 完全平方数-动态规划
- 12 款适用于开发人员的最佳 Web 开发软件
- 【应急响应】域名劫持事件发生后的应急响应策略
- 键盘忍者:无需鼠标即可启动任何应用程序
- Vim 为什么把 HJKL 当作光标键?