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. Java并发基础05. 传统线程同步通信技术

    先看一个问题: 有两个线程,子线程先执行10次,然后主线程执行5次,然后再切换到子线程执行10,再主线程执行5次--如此往返执行50次. 看完这个问题,很明显要用到线程间的通信了, 先分析一下思路:首 ...

  2. vue中的js引入图片,使用require相关问题

    vue中的js引入图片,必须require进来 或者引用网络地址 <template> <div class="home"> <img alt=&qu ...

  3. MySql 存储过程分页。

    use address;drop procedure if exists `proc_s_area_code`;delimiter // #告诉mysql解释器,该段命令是否已经结束了,mysql是否 ...

  4. MySQL 学习之查漏补缺

    1.InnoDB 相关知识点 InnoDB 引擎是将数据划分为若干数据页,页大小一般16 KB,16384个字节. 插入数据是以记录为单位,这些记录在磁盘的存放方式称之为 行格式/记录格式,有 com ...

  5. 基于 Spring Cloud 的微服务架构实践指南(下)

    show me the code and talk to me,做的出来更要说的明白 本文源码,请点击learnSpringCloud 我是布尔bl,你的支持是我分享的动力! 一.引入 上回 基于 S ...

  6. 7.1 java 类、(成员)变量、(成员)方法

    /* * 面向对象思想: * 面向对象是基于面向过程的编程思想. * * 面向过程:强调的是每一个功能的步骤 * 面向对象:强调的是对象,然后由对象去调用功能 * * 面向对象的思想特点: * A:是 ...

  7. CH5E07 划分大理石(背包dp+二进制拆分)

    传送门     大意: 有价值分别为1..6的大理石各a[1..6]块,现要将它们分成两部分,使得两部分价值之和相等,问是否可以实现.其中大理石的总数不超过20000. 解题思路: 妥妥的多重背包+二 ...

  8. Linux c++ vim环境搭建系列(2)——Ubuntu18.04.4编译安装llvm clang

    2. 源码编译安装llvm clang 参考网址: https://llvhttps

  9. 007-函数-C语言笔记

    007-函数-C语言笔记 学习目标 1.[了解]函数的分类 2.[掌握]函数的声明定义和调用 3.[掌握]函数的形参和实参 4.[掌握]带返回值的函数 5.[掌握]全局变量和局部变量 6.[了解]注释 ...

  10. 2019-07-31【机器学习】无监督学习之降维NMF算法 (人脸特征提取)

    代码 from numpy.random import RandomState #加载RandomState用于创建随机种子 import matplotlib.pyplot as plt from ...