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. CyclicBarrier是如何成为一个"栅栏"的

    CyclicBarrier是一种类似于栅栏的存在,意思就是在栅栏开放之前你都只能被挡在栅栏的一侧,当栅栏移除之后,之前被挡在一侧的多个对象则同时开始动起来. 1. 如何使用CyclicBarrier ...

  2. JVM类加载过程详细分析

    双亲委派加载模型 为什么需要双亲委派加载模型 主要是为了安全,避免用户恶意加载破坏JVM正常运行的字节码文件,比如说加载一个自己写的java.util.HashMap.class.这样就有可能造成包冲 ...

  3. Java对字母大小写转换

    Java对字母大小写转换 1.小写——大写String aa = "abc".toUpperCase(); 2.大写——小写 String bb = "ABC" ...

  4. python的字符串、列表、字典和函数

    一.字符串 在python中字符串无需通过像php中的explode或者javascript中的split进行分解即可完成切片,可以直接通过下标获取字符串中的每一个字符,下标从0开始,如果从厚望签署, ...

  5. (js描述的)数据结构[栈结构](2)

    (js描述的)数据结构[栈结构](2) 一.什么是栈结构 1.一种受限制的线性结构,这种结构可以基于数组来实现. 2.可以抽象成一个容器,上面的是栈顶,底下的是栈底.所以仅允许对栈顶进行操作, 二.栈 ...

  6. wireshark抓包实战(一),抓包原理

    一.什么样的"包"能被wireshark抓住呢? 1.本机 即直接抓取进出本机网卡的流量包.这种情况下,wireshark会绑定本机的一块网卡. 2.集线器 用于抓取流量泛洪,冲突 ...

  7. node+mysql数据库连接(入门)

    node+mysql的数据库操作: 1 //引入mysql var mysql = require('mysql'); //进行数据库连接设置 var connection = mysql.creat ...

  8. 30.4 Map HashMap

    本文将会讲解到: Map和Collection的对比 Map接口的使用,实现类HashMap的使用 /* * 需求:实现学号和姓名这样有对应关系的数据存储 * 为了体现这种有对应关系的数据,我们使用以 ...

  9. linux 块设备简要介绍

    1. 块设备简单分类:SCSI块设备和LVM逻辑卷块设备: 2. 创建块设备需要两个linux内核函数:alloc_disk:add_disk; alloc_disk:用于分配一个gendisk结构体 ...

  10. Linux下配置mail使用外部SMTP发送邮件

    修改/etc/mail.rc,增加两行:指定外部的smtp服务器地址.帐号密码等. # vi /etc/mail.rc set from=demo@qq.com smtp=smtp.qq.com se ...