xUtils3 其功能不得不说,简化了很多的开发步骤,可以说是非常好的开发工具,但是苦于没有完整的使用手册,下面是使用中的一些总结,不断完善。

xUtils 版本 3.3.36
jar包下载地址

http://files.cnblogs.com/files/steffen/xUtils-3.3.36.zip

GitHub项目地址

https://github.com/wyouflf/xUtils3

使用前配置

1 <uses-permission android:name="android.permission.INTERNET" />
2 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

导入文件

方法1:导入jar包文件;

方法2:在gradle中添加依赖:

dependencies {
compile 'org.xutils:xutils:3.3.44'
}

1. xUtils中的IOC框架

使用xUtils的第一步就是先创建自己的Application类,在MyApplication中初始化xUtils,代码如下:

1 public class MyApplication extends Application {
2 @Override
3 public void onCreate() {
4 super.onCreate();
5 x.Ext.init(this); //xUtils初始化
6 }
7 }

在AndroidManifest.xml的application标签中添加如下代码:

1 android:name=".MyApplication" 

这样初始化就算完成了。

例:下面使用IOC框架的代码如下:

 1 import org.xutils.view.annotation.ContentView;
2 import org.xutils.view.annotation.Event;
3 import org.xutils.view.annotation.ViewInject;
4 import org.xutils.x;
5 // 获取Activity布局
6 @ContentView(R.layout.activity_main)
7 public class MainActivity extends Activity {
8 // 获取控件ID
9 @ViewInject(R.id.mybut)
10 private Button mybut;
11
12 @Override
13 protected void onCreate(Bundle savedInstanceState) {
14 super.onCreate(savedInstanceState);
15 x.view().inject(this); // 初始化x.view(), 否则ID获取失败
16 }
17
18 /** 添加控件监听事件 */
19 @Event(value = {R.id.mybut, R.id.myradio},type = View.OnClickListener.class)
20 private void onButtonClick(View v){
21 switch (v.getId()) {
22 case R.id.mybut:
23 Toast.makeText(this,"我是xUtils的IOC功能", Toast.LENGTH_SHORT).show();
24 break;
25 case R.id.myradio:
26 break;
27 }
28 }
29 }

注释:监听事件中,@Event, value后面是 Array,当多个ID时{R.id.btn1, R.id.btn2, R.id.btn3, ···}; 当只有一个ID时可直接写 value=R.id.btn。

当有多个ID时,要保证后面事件的类型(type)要是一致的,否则要在不同的方法中实现。

另:点击事件方法名一定要包含onClick或者onEven。

2. 网络请求

RequestParams 参数:

RequestParams params = new RequestParams(url);

.addQueryStringParamter("wd", "xUtils"); // 适用于GET请求方式;类似于字符串拼接 http://xxx/x?wd=xUtils。

.addBodyParameter("wd", "xUtils"); // 适用于POST请求方式;添加到Body体的参数。

2.1 GET/POST请求

get和post请求并无太大区别,主要区别在于参数的添加方法上。

  GET请求 POST请求
请求参数添加:   .addQueryStringParamter("wd", "xUtils");   .addBodyParameter("wd", "xUtils");
请求的方法(带缓冲):   x.http().get(params,  new Callback.CommonCallback<String>() { });      x.http().post(params,  new Callback.CommonCallback<String>() { });   
请求的方法(带缓冲):   x.http().get(params,  new Callback.CacheCallback<String>() { });      x.http().post(params,  new Callback.CacheCallback<String>() { });   

2.1.1 无缓存请求(以post为例)

 RequestParams params = new RequestParams("http://xxx.com/xx");
x.http().post(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
// 请求成功后,返回结果
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
// 请求失败后返回结果
if (!isNetworkConnections() || ex instanceof HttpException) {
// 网络错误
} else {
// 其他请求错误
}
@Override
public void onCancelled(Callback.CancelledException cex) {
// 中断请求
}
@Override
public void onFinished() {
// 请求结束(必调用)
}
}
);
/**
* @return 网络是否连接 true:有网络,false:无网络
*/
private boolean isNetworkConnections() {
ConnectivityManager con = (ConnectivityManager) x.app().getSystemService(Context.CONNECTIVITY_SERVICE);
boolean wifi = con.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected();
boolean internet = con.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected();
return (wifi || internet);
}

2.1.2 有缓存请求(以POST为例)

 RequestParams params = new RequestParams("http://xxx.com/xx");
x.http().post(params, new Callback.CacheCallback<String>() {
@Override
public void onSuccess(String result) {
// 请求成功后,返回结果
}
@Override
public boolean onCache(String result) {
// 此方法为本地加载回调方法,本地没有数据则不会调用此方法
// @param result 缓存中得到的数据
// @return true 如果缓存中有数据就不再进行网络请求
// false 得到缓存数据后仍进行网络请求
return ture;
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
// 请求失败后返回结果
if (!isNetworkConnections() || ex instanceof HttpException) {
// 网络错误
} else {
// 其他请求错误
}
@Override
public void onCancelled(Callback.CancelledException cex) {
// 中断请求
}
@Override
public void onFinished() {
// 请求结束(必调用)
}
}
);

3. 图片加载

3.1 普通图片加载

最简单的加载方式:

x.image().bind(image, "http://pic6.nipic.com/20100418/4581549_084724004690_2.jpg");

当然我们也可以设置一些属性:

 ImageOptions imageOptions = new ImageOptions.Builder()
.setSize(120, 120)
.setRadius(DensityUtil.dip2px(5))
.setCrop(true)
.setImageScaleType(ImageView.ScaleType.CENTER_CROP)
.setLoadingDrawableId(R.mipmap.ic_launcher)
.setFailureDrawableId(R.mipmap.ic_launcher)
.build();
x.image().bind(image, "http://pic6.nipic.com/20100418/4581549_084724004690_2.jpg",imageOptions);

3.2 圆形图片加载

ImageOptions options = new ImageOptions.Builder()
.setLoadingDrawableId(R.mipmap.ic_launcher)
.setFailureDrawableId(R.mipmap.ic_launcher)
.setUseMemCache(true)
.setCircular(true) // 设置成圆形图片
.setFadeIn(true) //淡入效果
.setImageScaleType(ImageView.ScaleType.FIT_CENTER)
.build();

注:圆形图片加载options的设置对本地图片无效。

3.3 GIF图片加载

ImageOptions options = new ImageOptions.Builder()
.setLoadingDrawableId(R.mipmap.ic_launcher)
.setFailureDrawableId(R.mipmap.ic_launcher)
.setUseMemCache(true)
.setIgnoreGif(true) // 允许加载GIF图片
.setFadeIn(true) //淡入效果
.setImageScaleType(ImageView.ScaleType.FIT_CENTER)
.build();

3.4 ImageOptions属性

.setFadeIn(true); //淡入效果

.setCircular(true); //设置图片显示为圆形

.setSquare(true); //设置图片显示为正方形

.setCrop(true).setSize(200,200); //设置大小

.setAnimation(animation); //设置动画

.setFailureDrawable(Drawable failureDrawable); //设置加载失败的动画

.setFailureDrawableId(int failureDrawable); //以资源id设置加载失败的动画

.setLoadingDrawable(Drawable loadingDrawable); //设置加载中的动画

.setLoadingDrawableId(int loadingDrawable); //以资源id设置加载中的动画

.setIgnoreGif(false); //忽略Gif图片

.setParamsBuilder(ParamsBuilder paramsBuilder); //在网络请求中添加一些参数

.setRaduis(int raduis); //设置拐角弧度

.setUseMemCache(true); //设置使用MemCache,默认true

4. 相关资料

☞  Android xUtils3.0使用手册(二) - 数据库操作

Android xUtils3.0使用手册(一)- 基础功能使用的更多相关文章

  1. Android xUtils3.0使用手册(二) - 数据库操作

    步骤:  (1). 创建数据表: (2). DaoConfig 获取数据库的配置信息: (3).  获取数据库实例:  x.getDb(daoConfig); (4). 数据库的增删改查. 1. 创建 ...

  2. [Android]Android5.0实现静默接听电话功能

    原因: android曾经能够通过AIDL进行静默接听.可是5.0以后就被谷歌给屏蔽了.这时候我们仅仅能通过其它方式实现了. 解决方式: try { Runtime.getRuntime().exec ...

  3. Android 8.0 功能和 API

    Android 8.0 为用户和开发者引入多种新功能.本文重点介绍面向开发者的新功能. 用户体验 通知 在 Android 8.0 中,我们已重新设计通知,以便为管理通知行为和设置提供更轻松和更统一的 ...

  4. Android 5.0 最应该实现的8个期望

    毫无疑问,Android 5 将是令人兴奋的操作系统,因为 Android4.0 至 4.4 版本之间并没有显著的差异,显然谷歌会在 5.0 版本中进行一些较大幅度的革新.那么,代号为“柠檬芝士蛋糕” ...

  5. Android 5.0最应该实现的8个期望

    毫无疑问,Android 5 将是令人兴奋的操作系统,因为 Android4.0 至 4.4 版本之间并没有显著的差异,显然谷歌会在 5.0 版本中进行一些较大幅度的革新.那么,代号为“柠檬芝士蛋糕” ...

  6. Android 5.0 API新增和改进

    开始开发 要构建 Android 5.0 版应用,您必须先下载 Android SDK,然后使用 SDK 管理器下载 Android 5.0 SDK 平台和系统映像. 更新您的目标 API 级别 要进 ...

  7. ArcGIS Runtime for Android开发教程V2.0(4)基础篇---MapView

    原文地址: ArcGIS Runtime for Android开发教程V2.0(4)基础篇---MapView - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http:/ ...

  8. ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map

    原文地址: ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NE ...

  9. Android 7.0 新增功能和api

    Android 7.0 Nougat 为用户和开发者引入多种新功能.本文重点介绍面向开发者的新功能. 请务必查阅 Android 7.0 行为变更以了解平台变更可能影响您的应用的领域. 要详细了解 A ...

随机推荐

  1. SciPy - 正态性 与 KS 检验

    假设检验的基本思想 若对总体的某个假设是真实的,那么不利于或者不能支持这一假设的事件A在一次试验中是几乎不可能发生的:如果事件A真的发生了,则有理由怀疑这一假设的真实性,从而拒绝该假设: 假设检验实质 ...

  2. 基于.NetCore3.1搭建项目系列 —— 使用Swagger导出文档 (补充篇)

    前言 在上一篇导出文档番外篇中,我们已经熟悉了怎样根据json数据导出word的文档,生成接口文档,而在这一篇,将对上一篇进行完善补充,增加多种导出方式,实现更加完善的导出功能. 回顾 1. 获取Sw ...

  3. flask from_object和from_pyfile的区别

    flask  from_object和from_pyfile的区别 from_object接受的是一个模块对象,需求导入 from_pyfile接受的是一个文件名的字符串,文件可以不是py文件也可以是 ...

  4. 细数Java项目中用过的配置文件(YAML篇)

    灵魂拷问:YAML,在项目中用过没?它与 properties 文件啥区别? 目前 SpringBoot.SpringCloud.Docker 等各大项目.各大组件,在使用过程中几乎都能看到 YAML ...

  5. 从零开始实现放置游戏(十三)——实现战斗挂机(4)添加websocket组件

    前两张,我们已经实现了登陆界面和游戏的主界面.不过游戏主界面的数据都是在前端写死的文本,本章我们给game模块添加websocket组件,实现前后端通信,这样,前端的数据就可以从后端动态获取到了. 一 ...

  6. Python之利用jieba库做词频统计且制作词云图

    一.环境以及注意事项 1.windows10家庭版 python 3.7.1 2.需要使用到的库 wordcloud(词云),jieba(中文分词库),安装过程不展示 3.注意事项:由于wordclo ...

  7. MySQL 5.7.18 zip 文件安装过程

    安装最新MySQL:5.7.18 1.下载路径 https://dev.mysql.com/downloads/mysql/ 有账号登陆下载, 没有账号:no thanks;just start my ...

  8. 【three.js 第一课】创建场景,显示几何体

    <!DOCTYPE html> <html> <head> <title>demo1</title> </head> <s ...

  9. golang实现常用集合原理介绍

    golang本身对常用集合的封装还是比较少的,主要有数组(切片).双向链表.堆等.在工作中可能用到其他常用的集合,于是我自己对常用的集合进行了封装,并对原理做了简单介绍,代码库地址:https://g ...

  10. 用python画出全球疫情趋势变化图

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:谦睿科技 PS:如有需要Python学习资料的小伙伴可以加点击下方链接 ...