- xUtils 包含了很多实用的android工具。
- xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...
- xUitls最低兼容android 2.2 (api level 8)
目录:
一、简介
二、XUtils的配置
三、
注解模块
- Activity的注解
- Fragment 的注解
- ViewHolder的注解
- Event事件的注解
四、
网络模块
- GET请求
- POST请求
- 其他请求
- 文件上传
- 文件下载
- 使用缓存
五、
图片模块
1) 4个bind方法
ImageOptions 讲解
1、ImageOption 创建实例:
2、下面详细讲解上面的set方法
2) loadDrawable 方法
3) loadFile 方法
六、
数据库模块
(待完善。。。)
一、简介
- 目前xUtils主要有四大模块:
-
-
DbUtils模块:
- android中的orm框架,一行代码就可以进行增删改查;
- 支持事务,默认关闭;
- 可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
- 支持绑定外键,保存实体时外键关联实体自动保存或更新;
- 自动加载外键关联实体,支持延时加载;
- 支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
-
ViewUtils模块:
- android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
- 新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
- 目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
-
HttpUtils模块:
- 支持同步,异步方式的请求;
- 支持大文件上传,上传大文件不会oom;
- 支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
- 下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
- 返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。
-
BitmapUtils模块:
- 加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
- 支持加载网络图片和本地图片;
- 内存管理使用lru算法,更好的管理bitmap内存;
- 可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...
-
二、XUtils的配置
其中,第一步中可能找不到compile的文件,可
添加jar包。
三、注解模块
调用方法:
x.view().inject(×××);
注解模块分为一下
四种
:
1、
Activity
的注解
调用
x.view().inject(Activity);方法
如果需要获取xml布局文件中的
控件实例,如下:
2、
Fragment
的注解
下面是传统的获取Fragment的方法:
下面是注解方式获取:
可以看到,fragment的注解跟Activity差不多,只不过是
inject方法传入的
参数不一样而已。
3、
ViewHolder
的注解
下面是使用注解:
可以看到从convertView到viewHolder非常简洁,只调用了一个inject方法。如果不使用注解方式,那么就需要如下写:
viewHolder
.
childName
= (TextView) convertView.findViewById(R.id.
tv_child_name
);
如果列表项里有多个控件,那么会显得代码很冗余。
4、
Event
事件的注解
如上图,有几个需要注意的地方:
- 注解使用@Event(type,value)方法注解,type默认值为View.OnClicklistener.class,也就是点击事件,如果给空间添加点击事件监听,那么此参数可省略不写。
- 自定义的方法类型必须为private,返回值与传入参数需要与回调方法中的一一对应,如上所标。
按照以上注意事项,下面是
长按事件的注解:
其中 return
true表示此button消耗了此长按事件。
下面是ListView的
列表项点击事件:
四、网络模块
调用方法:
x.http().×××(×××);
网络模块包含以下几部分:
1、GET请求
执行GET请求需要调用
x.
http
().get(RequestParams, Callback.CommonCallback<Object>);方法。其中CommonCallback需要实现
onSuccess、
onError、
onCancelled、
onFinished
4个回调方法,具体如下:
String url ="http://news-at.zhihu.com/api/4/news/latest";
//通过url构造RequestParams请求参数实例
RequestParamsrequestParams =newRequestParams(url);
//添加请求参数,添加后网址自动变为
// http://news-at.zhihu.com/api/4/news/latest?user_name=tangao&user_psw=123456
requestParams.addQueryStringParameter("user_name","tangao");
requestParams.addQueryStringParameter("user_psw","123456");
Callback.Cancelable cancelable = x.http().get(requestParams,newCallback.CommonCallback<String>() {
@Override
public voidonSuccess(String s) {
/**
*网络请求成功的回调方法,String是CommonCallback中的泛型参数类型
*表示网络请求返回的数据类型,由开发人员指定
*/
System.out.println("onSuccess ----------------> "+s);
}
@Override
public voidonError(Throwable throwable,booleanisOnCallback) {
/**
*请求错误的回调方法(比如没网时),其中isOnCallback为true表示是被CommonCallback中
*的其他回调方法回调,false则表示被其他东西在外部回调
*/
System.out.println("onError ----------------> ");
}
@Override
public voidonCancelled(CancelledException e) {
/**
*网络请求取消的回调方法,上面网络请求的返回值cancelable(Callback.Cancelable)
*执行cancelable.cancel()时回调此方法
*/
System.out.println("onCancelled ----------------> ");
}
@Override
public voidonFinished() {
/**
*不管网络请求成功、失败或者取消,都会执行此方法
*可在此对界面中进度条等控件进行操作
*/
System.out.println("onFinished ----------------> ");
}
});
//cancelable.cancel();回调上面的onCancelled方法
2、POST请求
post请求除了
RequestParams 的初始化与get不同之外,其他一样,下面是
RequestParams 的初始化:
String url ="http://news-at.zhihu.com/api/4/news/latest";
RequestParams requestParams1 =newRequestParams(url);
requestParams1.addBodyParameter("user_name","tangao");
requestParams1.addParameter("user_psw","123456");
requestParams1.addHeader("head","userHead");
其中,
addBodyParameter是
post请求专用的,也就是将
请求参数添加到
requestBody中,而
addParameter则灵活一些,如果是post请求,那么请求参数会被放到requestBody中,如果是get请求,则参数会被放进
请求地址中。
3、其他请求
除了get 与 post外,我们还可以调用:
x.
http
()
.request(HttpMethod,RequestParams, Callback.CommonCallback<Object>);
方法进行其他网络请求,HttpMethod的
取值参考下图:
其他的两个参数与上面两种方式相同。RequestParams 调用
addParams()方法。
4、文件上传
如下图,将
文件放入request body中,通过
post方法上传一个文件。通过setMultipart()方法,将请求体中的
content-type 设置为Multipart类型(虽然我也不懂为什么?)。
5、文件下载
我们调用以下方法下载文件:
x.
http
().
post
(RequestParams,
new
Callback.
ProgressCallback
<
File
>();
其中,
ProgressCallback是CommonCallback的
子接口,并添加了
onWaiting、
onStarted、
onLoading方法,我们可以通过这几个新增的方法
持续更新下载过程中的界面,如ProgressBar等控件。
//---------------文件下载----------------------
String url1 ="https://www.baidu.com/img/bd_logo1.png";
RequestParams rp =newRequestParams(url1);
//设置文件存放的路径
rp.setSaveFilePath(Environment.getExternalStorageDirectory() + "/xutil/baidu_logo.png");
//设置文件自动改名(不太懂,也不懂用???)
rp.setAutoRename(true);
x.http().post(rp,newCallback.ProgressCallback<File>() {
@Override
public voidonWaiting() {
/**
*文件开始下载前最先调用
*/
}
@Override
public voidonStarted() {
/**
*文件开始下载时调用
*/
}
@Override
public voidonLoading(longtotal,longcurrent,booleanb) {
/**
*文件正在下载时调用,total是文件总大小,current是已下载大小
*/
System.out.println("totla ---> " + total +" current ---> "+ current);
}
@Override
public voidonSuccess(File file) {
//如果文件是一个apk安装包文件,那么可以通过下面的代码进入安装页面
Intent intent =newIntent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
startActivity(intent);
}
@Override
public voidonError(Throwable throwable,booleanb) {
}
@Override
public voidonCancelled(CancelledException e) {
}
@Override
public voidonFinished() {
}
});
}
});
6、使用缓存
调用如下方法:
x.
http
().
get
(req,
new
Callback.
CacheCallback
<String>();
其中
CacheCallback是CommonCallback的子接口,并添加了
onCache方法,通过
设置,一定时间内如果再次进行网络调用,可直接从
cache里取出数据而不再进行网络调用,具体设置及意义见如下
代码及注释:
RequestParams req =newRequestParams(url);
//设置缓存的有效时间,这里设置60秒
req.setCacheMaxAge(60*1000);//如果不设置,是否以后就都从缓存里取了?
x.http().get(req,newCallback.CacheCallback<String>() {
@Override
public booleanonCache(String s) {
/**
*返回true,表示相信本地缓存,即在上面setCacheMaxAge设置的60秒内,
*如果再一次发出了网络请求,那么直接从cache里面取出数据,而不再进行网络调用,
*此时onSuccess中参数返回null。。。。。。
*
*返回false,表示不相信本地缓存,即每次发网络请求,都会进行网络请求调用
*
*/
return false;
}
@Override
public voidonSuccess(String s) {
}
@Override
public voidonError(Throwable throwable,booleanb) {
}
@Override
public voidonCancelled(CancelledException e) {
}
@Override
public voidonFinished() {
}
});
五、图片模块
调用方法:
x.image().×××(×××);
本模块主要包括以下内容:
1) 4个
bind
方法
下面4个方法都是通过
x.image().bind(×××);
调用,且
CommonCallback
回调方法中
不需要
进行任何操作便可加载。
void bind(ImageView iv, String url);
//——iv为图片将要填充的ImageView控件,url为网络地址。
void bind(ImageView iv, String url, ImageOptions io);
//——前两个参数同上,ImageOption在下面讲解。
void bind(ImageView iv, String url, CommonCallback<Drawable> var3);
//——前两个参数同上,第三个参数同网络模块,只不过这里返回的Drawable对象。
void bind(ImageView iv, String url, ImageOptions io, CommonCallback<Drawable> var4);
//——参考前三个方法的讲解。
ImageOptions 讲解
ImageOption对象用于通过他的内部类
Builder
设置图片的属性
。
1、ImageOption
创建实例
:
ImageOptions
imageOptions =
new
ImageOptions
.Builder().build();
其中,
new
ImageOptions
.Builder()
返回
Builder
对象
,
调用build()方法前,可通过以下的set方法设置所加载图片的属性:
2、下面详细讲解上面的set方法
publicImageOptions.BuildersetAnimation(Animation animation)
//——给图片设置动画
publicImageOptions.BuildersetAutoRotate(booleanautoRotate)
//——根据图片的属性设置图片的自动旋转。应用场景是,一些手机拍照后照片会旋转,调用此方法会再将照片旋转回正确的角度。
publicImageOptions.BuildersetCircular(booleancircular)
//——设置为true时图片将会以圆形呈现出来。
publicImageOptions.BuildersetConfig(Config config)
//——此方法设置图片质量config的取值范围为Bitmap.Config.RGB_565(XUtil默认)、
Bitmap.Config.ALPHA_8、Bitmap.Config.ARGB_4444、Bitmap.Config.ARGB_8888
publicImageOptions.BuildersetCrop(booleancrop)
//——此方法与setSize()方法合用,此方法设置为true,setSize才能生效。
publicImageOptions.BuildersetSize(intwidth,intheight)
//——此方法与setCrop()方法合用,setCrop设置为true,此方法才能生效。
publicImageOptions.BuildersetFadeIn(booleanfadeIn)
//——展示图片时淡入效果
publicImageOptions.BuildersetFailureDrawable(Drawable failureDrawable)
//——通过drawable方式设置加载失败时显示的图片。
publicImageOptions.BuildersetFailureDrawableId(intfailureDrawableId)
//——通过资源ID的方式设置加载失败时显示的图片。
publicImageOptions.BuildersetForceLoadingDrawable(booleanforceLoadingDrawable)
//——与setLoadingDrawable、setLoadingDrawableId合用,默认为true,表示显示加载时的图片,设置为false则表示不显示setLoadingDrawable设置的加载时图片。
publicImageOptions.BuildersetLoadingDrawable(Drawable loadingDrawable)
//—— 与setForceLoadingDrawable方法合用,此方法通过drawable方式设置加载过程中显示的图片。
publicImageOptions.BuildersetLoadingDrawableId(intloadingDrawableId)
//—— 与setForceLoadingDrawable方法合用,此方法通过资源id方式设置加载过程中显示的图片。
publicImageOptions.BuildersetIgnoreGif(booleanignoreGif)
//—— 设置是否忽略gif图,默认忽略。
publicImageOptions.BuildersetImageScaleType(ScaleType imageScaleType)
//——这是ImageView中的方法,可参考ImageView。
publicImageOptions.BuildersetParamsBuilder(ImageOptions.ParamsBuilder paramsBuilder)
//——这是重点的方法。既然图片加载也是网络请求,那么我们就可以给这个请求添加参数,就是通过此方法实现。ParamsBuilder实例创建如下:
new ImageOptions.ParamsBuilder() {
@Override
public RequestParams buildParams(RequestParamsparams, ImageOptions options) {
//在此设置RequestParams参数,参见网络模块
return params;//返回设置好的RequestParams实例
}
}
publicImageOptions.BuildersetPlaceholderScaleType(ScaleType placeholderScaleType)
//—— 设置加载失败(setFailureDrawable)、加载中(setLoadingDrawable)图片的scaleType。
publicImageOptions.BuildersetRadius(intradius)
//——设置圆角弧度。
publicImageOptions.BuildersetSquare(booleansquare)
//——设置为true,则显示正方形图片。
publicImageOptions.BuildersetUseMemCache(booleanuseMemCache)
//—— 设置是否将图片放入MemCache缓存中。默认为true。
2) loadDrawable 方法
CancelableloadDrawable(String url, ImageOptions io, CommonCallback<Drawable> callback);
这个方法需要在CommonCallback的
onSuccess()回调方法中设置 ImageView的内容。
3) loadFile 方法
CancelableloadFile(String url, ImageOptions io,CacheCallback<File> callback);
我们在上面的
bind和
loadDrawable方法中,可能进行了图片的网络请求,此时我们传入bind或loadDrawable方法中用到的
url参数给loadFile,再执行此方法,则从
cache中取出结果就行,而CacheCallback中的
onSuccess方法中返回
null。
同样,这个方法也是在callback中的
回调方法中填充ImageView。
六、数据库模块
。。。。。。。。。。。。。。。。。。。