XUtils3.0快速开发框架

本文根据 极客学院 XUtils3.0 整理
  • xUtils 包含了很多实用的android工具。
  • xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...
  • xUitls最低兼容android 2.2 (api level 8)

目录:
一、简介
二、XUtils的配置
三、 注解模块
  1. Activity的注解
  2. Fragment 的注解
  3. ViewHolder的注解
  4. Event事件的注解
四、 网络模块
  1. GET请求
  2. POST请求
  3. 其他请求
  4. 文件上传
  5. 文件下载
  6. 使用缓存
五、 图片模块
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需要实现 onSuccessonErroronCancelledonFinished 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");
其中, addBodyParameterpost请求专用的,也就是将 请求参数添加到 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的 子接口,并添加了 onWaitingonStartedonLoading方法,我们可以通过这几个新增的方法 持续更新下载过程中的界面,如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);
我们在上面的 bindloadDrawable方法中,可能进行了图片的网络请求,此时我们传入bind或loadDrawable方法中用到的 url参数给loadFile,再执行此方法,则从 cache中取出结果就行,而CacheCallback中的 onSuccess方法中返回 null
同样,这个方法也是在callback中的 回调方法中填充ImageView。

六、数据库模块

。。。。。。。。。。。。。。。。。。。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值