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. Spring钩子接口Aware

    前言 我们在编写代码的时候,有的时候想要使用Spring的底层组件,类似于 ApplicationContext, BeanFactory等等 那我们实现Spring提供的钩子方法xxxAware.在 ...

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

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

  3. 【Linux】系统管理

    软件包管理 一 软件包分类 源码包: .tar.gz .tar.bz2 二进制包: .rpm 二 二进制包安装 (一) rpm命令手动管理二进制包 (挂载光盘) 1 包名-版本号-发布次数-适合lin ...

  4. android 软件(app)之家庭版记账本首次进行helloword等相关测试

    在进行对于app的创建之前是对于android studio的相关安装的环境的配置,完成这些之后自己就写个一个简单的helloword的实例进行了测试.之后通过进一步的向下挖掘,发现当将hellowo ...

  5. String与StringBuffer和StringBuilder的根本区别(String为什么无法修改字符串长度)

    从网上看了很多的信息,说的大部分是关于final修饰的原因,却没有详细的解释!根据自己收集的资料,跟大家分享一下我的观点(有错请指正).1.我们都知道在修改字符串长度的时候,StringBuffer和 ...

  6. mysql全文索引浅谈

    原文链接:http://www.cnblogs.com/robertsun/p/5999588.html 对于一些简单的检索可以通过mysql自带的全文索引及 MATCH AGAINST 查询语句实现 ...

  7. 30.2 案例:ArrayList本身数据可以重复,写出去重的方法

    package day30_HashSet; /* * ArrayList特点(实现List接口) 有序.可以重复.可以使用索引 *使用ArrayList实现数据去重 * */ import java ...

  8. 记一个openwrt reboot异步信号处理死锁问题

    写在前面 觉得本页面排版单调的话,可以尝试到这里看. 问题背景 在 openwrt 上碰到了一个偶现的 reboot 失效问题.执行 reboot 之后系统并没有重启,此时控制台还能工作. 初步排查 ...

  9. Jwt认识与攻击

    今天看到2018强网杯的题目,因此总结一下. Json Web Token Json Web Token简称jwt 那么怎么样可以让HTTP记住曾经发生的事情呢? 这里的选择可以很多:cookie,s ...

  10. 如何在非 sudo 用户下运行 docker 命令?

    当我们在一台 Linux 系统中安装了 Docker 后, 有时候会遇到下面这样的错误, 我们在运行 docker 的命令时必须加上 sudo, 例如: sudo docker ps, 但是我们其实更 ...