安卓中自定义并使用Volley框架请求网络
大家好,今天我们讲一下如何使用Volley框架请求网络,为何要使用Volley框架,这就要先说一下使用Volley框架请求网络的优点了,volley是易于定制的,即你可以根据需求来设定volley框架,还有volley框架支持请求的优先级设定,即你可以自主设定网络请求的优先级,还有就是volley框架请求支持取消单个或多个请求,这个一会设置请求的时候会特别说明,还有它可以自动调度网络请求,至于其他的如代码的健壮性、支持多并发等等就不一一列举了,说了那么多下面就介绍如何自定义并使用Volley框架:
第一步:定义netrequest类继承StringRequest类
1、在这个类里首先要自定义三个全局变量,
复制代码
1privatePrioritypriority;
2privateMapheaders;
3privateMapparams;
4
5/
6初始化全局变量
7/
8privatevoidinit(){
9priority=Priority.NORMAL;
10headers=newHashMap<>();
11params=newHashMap<>();
12}
复制代码
2、实现两个有参构造,在这两个构造方法中并不需要再多些什么,只要初始化自定义的三个全局变量。
复制代码
1publicNetRequest(intmethod,Stringurl,Response.Listenerlistener,Response.ErrorListenererrorListener){
2super(method,url,listener,errorListener);
3init();
4}
5
6publicNetRequest(Stringurl,Response.Listenerlistener,Response.ErrorListenererrorListener){
7super(url,listener,errorListener);
8init();
9}
复制代码
3、重写设置优先级的方法
1//设置优先级
2@Override
3publicPrioritygetPriority(){
4returnpriority;
5}
4、重写为请求添加请求头信息的方法
复制代码
1//为请求添加头信息的方法
2@Override
3publicMapgetHeaders()throwsAuthFailureError{
4returnheaders;
5}
6
7@Override
8publicMapgetParams()throwsAuthFailureError{
9returnparams;
10}
11
12publicNetRequestsetPriority(Prioritypriority){
13this.priority=priority;
14returnthis;
15}
16
17publicNetRequestaddRequestHeader(Stringkey,Stringvalue){
18this.headers.put(key,value);
19returnthis;
20}
21
22publicNetRequestaddParams(Stringkey,Stringvalue){
23this.params.put(key,value);
24returnthis;
25}
复制代码
5、自定义一个发送请求的方法,其中VolleyUtil类为一个工具类,是自己定义的下一步就是定义它
1/
2发送请求
3/
4publicvoidstart(){
5VolleyUtil.start(this);
6}
6、自定义一个静态类Builder为网络请求传参,这也被称作构造者模式
复制代码
1//构造者模式
2publicstaticclassBuilder{
3
4privateStringurl;
5privateintmethod;
6privateCallBackcallBack;
7
8publicBuildersetCallBack(CallBackcallBack){
9this.callBack=callBack;
10returnthis;
11}
12publicBuildersetUrl(Stringurl){
13this.url=url;
14returnthis;
15}
16publicBuildersetMethod(intmethod){
17this.method=method;
18returnthis;
19}
20}
复制代码
7、自定义一个buileder方法请求网络返回NetRequest(这一步比较关键)
复制代码
1/
2创建一个NetRequest请求网络
3@returnNetRequest
4/
5publicNetRequestbuild(){
6NetRequestnr=newNetRequest(
7method,
8url,
9newResponse.Listener(){
10@Override
11publicvoidonResponse(Stringresponse){
12if(callBack!=null){
13callBack.onSuccess(response);
14}
15}
16},
17newResponse.ErrorListener(){
18@Override
19publicvoidonErrorResponse(VolleyErrorerror){
20if(callBack!=null){
21callBack.onError(error);
22}
23}
24});
25returnnr;
26}
复制代码
8、定义一个接口Callback包含两个抽象方法来实现请求网络四个参数的后两个(因为网络请求是一个一步的操作,所以请求的时候需要自定义一个类实现这个借口并重写接口中的这两个方法)
复制代码
1importcom.android.volley.VolleyError;
2
3/
4Createdbyzhangdion2016/8/8.
5/
6publicinterfaceCallBack{
7publicvoidonSuccess(Stringrespone);
8publicvoidonError(VolleyErrorerror);
9}
复制代码
第二步:自定义一个工具类(就是第一步中start方法中的那个工具类,里面的方法都设置成静态的方便调用,这也是工厂模式的一种)
1、首先要初始化请求队列
复制代码
1privatestaticRequestQueuerequestQueue;
2/
3初始化请求队列
4@parammContext
5/
6publicstaticvoidinit(ContextmContext){
7if(requestQueue==null){
8requestQueue=Volley.newRequestQueue(mContext);
9}
10}
复制代码
2、设置get请求方法
复制代码
1/
2get请求
3@paramurl
4@return
5/
6publicstaticNetRequest.Builderget(Stringurl){
7returnnewNetRequest.Builder(www.visa158.com)
8.setMethod(Request.Method.GET)
9.setUrl(url);
10}
复制代码
3、设置post请求方法
复制代码
1/
2post请求
3@return
4/
5publicstaticNetRequest.Builderpost(Stringurl){
6returnnewNetRequest.Builder(www.hunanwang.net)
7.setMethod(Request.Method.POST)
8.setUrl(url);
9}
复制代码
4、定义开始运行start方法(即将请求添加到请求队列)
1/
2将请求添加到请求队列
3/
4publicstaticvoidstart(NetRequestnr){
5requestQueue.add(nr);
6}
5、设置取消请求方法(利用方法重载来实现取消一个和取消一组)
复制代码
1//方法重载
2publicstaticvoidcancel(Objecttag){
3requestQueue.cancelAll(tag);
4}
5
6publicstaticvoidcancel(RequestQueue.RequestFilterfilter){
7requestQueue.cancelAll(filter);
8}
复制代码
这里的cancel()方法第一个请求取消方法是把所有请求都取消,第二个请求取消方法是自定义选择性的取消某个请求
第三步:调用封装好的静态类实现请求网络
<1>先讲一下使用get请求网络
1、定义一个内部类即网络回调,实现Callback接口并重写其中的两个方法,需要如何重写我已经在代码块中说明了,大家仔细阅读
复制代码
1privateclassNetCallBack1implementsCallBack{
2@Override
3publicvoidonSuccess(Stringrespone){
4这里是请求成功是执行的操作
5记住网络请求都是异步的,所以加载数据更新界面的功能都必须在这里实现
6不然会报空指针的错误
7}
8
9@Override
10publicvoidonError(VolleyErrorerror){
11这里是执行网络请求不成功后执行的操作
12}
13}
复制代码
2、利用工厂模式进行请求网络
1VolleyUtil.get(你请求的网络接口)
2.setCallBack(newNetCallBack())//这是上一步自定义的回调函数
3.build()
4.setPriority(Request.Priority.HIGH)
5.addRequestHeader("apikey","你自己的apiley")
6.start();
<2>再讲一下如何使用post请求
我这里就直接在在调用的时候就实现了callback接口,不再单独实现了
复制代码
1VolleyUtil.post("http://192.168.191.1:8080/Server/doReg.jsp")
2.setCallBack(newCallBack(){
3@Override
4publicvoidonSuccess(Stringrespone){
5请求成功是执行的步骤
6}
7
8@Override
9publicvoidonError(VolleyErrorerror){
10请求不成功时执行的步骤
11}
12})
13.build()
14.addParams("name","张三")
15.addParams("pwd","12345678")
16.setTag("post")
17.start();
复制代码
其中addParams方法是在第二步NetRequest中有专门的定义,代码可以在第一步中寻找到
至此使用volley框架请求网络的步骤就算完成了,看起来定义比较麻烦,但是这是一劳永逸的,你在工程中只需要定义一遍,就可以在工程中需要网络请求的地方直接可以调用,注意的是网络请求还需要设置请求权限(如果大家不清楚如何设置可以去我写的关于定位的那篇文章中找到),这个需要在清单文件中申明,还有是如果你想一劳永逸还需要给工具类VolleyUtil进行初始化,这段代码可以放在全局类中即Application类中,代码如下:
复制代码
1/
2Createdbyzhangdion2016/8/23.
3/
4publicclassMyApplicationextendsApplication{
5
6@Override
7publicvoidonCreate(){
8super.onCreate();
9VolleyUtil.init(this);//初始化请求队列
10}
11
12}
复制代码
好了,到此自定义并使用Volley框架请求网络数据的步骤就算全部结束了,当然网络请求框架有很多种,Volley并不是最好的,但是它的优点也特别显明,所以在对于轻量级的请求网络数据时,使用Volley框架还是弊大于利的,这里笔者还是比较建议使用的。还是如果大家感觉这篇文章还不错的话就麻烦给推荐一下,若是有哪些地方总结的不对或是知识点有错误的地方还是希望大家评论指正,谢谢。
|
|