安卓中自定义并使用Volley框架请求网络

  大家好,今天我们讲一下如何使用Volley框架请求网络,为何要使用Volley框架,这就要先说一下使用Volley框架请求网络的优点了,volley是易于定制的,即你可以根据需求来设定volley框架,还有volley框架支持请求的优先级设定,即你可以自主设定网络请求的优先级,还有就是volley框架请求支持取消单个或多个请求,这个一会设置请求的时候会特别说明,还有它可以自动调度网络请求,至于其他的如代码的健壮性、支持多并发等等就不一一列举了,说了那么多下面就介绍如何自定义并使用Volley框架:

  第一步:定义netrequest类继承StringRequest类

  1、在这个类里首先要自定义三个全局变量,

 1 private Priority priority;
 2 private Map<String,String> headers ;
 3 private Map<String,String> params;
 4
 5 /**
 6      * 初始化全局变量
 7 */
 8 private void init(){
 9 priority = Priority.NORMAL;
10 headers = new HashMap<>();
11 params = new HashMap<>();
12     }

  2、实现两个有参构造,在这两个构造方法中并不需要再多些什么,只要初始化自定义的三个全局变量。

1 public NetRequest(int method, String url, Response.Listener<String> listener, Response.ErrorListener errorListener) {
2 super(method, url, listener, errorListener);
3         init();
4     }
5
6 public NetRequest(String url, Response.Listener<String> listener, Response.ErrorListener errorListener) {
7 super(url, listener, errorListener);
8         init();
9     }

  3、重写设置优先级的方法

1 //设置优先级
2 @Override
3 public Priority getPriority() {
4 return priority;
5     }

  4、重写为请求添加请求头信息的方法

 1 //为请求添加头信息的方法
 2 @Override
 3 public Map<String, String> getHeaders() throws AuthFailureError {
 4 return headers;
 5     }
 6
 7 @Override
 8 public Map<String, String> getParams()throws AuthFailureError{
 9 return params;
10     }
11
12 public NetRequest setPriority(Priority priority){
13 this.priority = priority;
14 return this;
15     }
16
17 public NetRequest addRequestHeader(String key,String value){
18 this.headers.put(key,value);
19 return this;
20     }
21
22 public NetRequest addParams(String key,String value){
23 this.params.put(key, value);
24 return this;
25     }

  5、自定义一个发送请求的方法,其中VolleyUtil类为一个工具类,是自己定义的下一步就是定义它

1 /**
2      * 发送请求
3 */
4 public void start(){
5             VolleyUtil.start(this);
6         }

  6、自定义一个静态类Builder为网络请求传参,这也被称作构造者模式

 1 //构造者模式
 2 public static class Builder{
 3
 4   private String url;
 5   private int method;
 6   private CallBack callBack;
 7
 8   public Builder setCallBack(CallBack callBack){
 9     this.callBack  = callBack;
10     return this;
11       }
12   public Builder setUrl(String url){
13     this.url = url;
14     return this;
15       }
16   public Builder setMethod(int method){
17     this.method = method;
18     return this;
19       }20  }

  7、自定义一个buileder方法请求网络返回NetRequest(这一步比较关键)

 1       /**
 2          * 创建一个NetRequest请求网络
 3          * @return  NetRequest
 4          */
 5     public NetRequest build(){
 6             NetRequest nr = new NetRequest(
 7                 method,
 8                 url,
 9                 new Response.Listener<String>() {
10                     @Override
11                     public void onResponse(String response) {
12                         if (callBack!=null){
13                                 callBack.onSuccess(response);
14                             }
15                      }
16                 },
17                 new Response.ErrorListener() {
18                     @Override
19                     public void onErrorResponse(VolleyError error) {
20                         if (callBack!=null){
21                             callBack.onError(error);
22                             }
23                         }
24                  });
25         return nr;
26         }                    

  8、定义一个接口Callback包含两个抽象方法来实现请求网络四个参数的后两个(因为网络请求是一个一步的操作,所以请求的时候需要自定义一个类实现这个借口并重写接口中的这两个方法)

1 import com.android.volley.VolleyError;
2
3     /**
4      * Created by zhangdi on 2016/8/8.
5      */
6     public interface CallBack {
7         public void onSuccess(String respone);
8         public void onError(VolleyError error);
9     }    

  第二步:自定义一个工具类(就是第一步中start方法中的那个工具类,里面的方法都设置成静态的方便调用,这也是工厂模式的一种)

  1、首先要初始化请求队列

 1 private static RequestQueue requestQueue;
 2     /**
 3      * 初始化请求队列
 4      * @param mContext
 5      */
 6     public static void init(Context mContext){
 7         if (requestQueue==null){
 8             requestQueue = Volley.newRequestQueue(mContext);
 9         }
10     }

  2、设置get请求方法

 1    /**
 2      * get请求
 3      * @param url
 4      * @return
 5      */
 6     public static NetRequest.Builder get(String url){
 7         return new NetRequest.Builder()
 8                     .setMethod(Request.Method.GET)
 9                     .setUrl(url);
10     }

  3、设置post请求方法

1     /**
2      * post请求
3      * @return
4      */
5     public static NetRequest.Builder post(String url){
6         return new NetRequest.Builder()
7                 .setMethod(Request.Method.POST)
8                 .setUrl(url);
9     }

  4、定义开始运行start方法(即将请求添加到请求队列)

1     /**
2      *将请求添加到请求队列
3      */
4     public  static void start(NetRequest nr){
5         requestQueue.add(nr);
6     }

  5、设置取消请求方法(利用方法重载来实现取消一个和取消一组)

1     //方法重载
2     public static void cancel(Object tag){
3         requestQueue.cancelAll(tag);
4     }
5
6     public static void cancel(RequestQueue.RequestFilter filter){
7         requestQueue.cancelAll(filter);
8     }

这里的cancel()方法第一个请求取消方法是把所有请求都取消,第二个请求取消方法是自定义选择性的取消某个请求

  第三步:调用封装好的静态类实现请求网络

  <1>先讲一下使用get请求网络

    1、定义一个内部类即网络回调,实现Callback接口并重写其中的两个方法,需要如何重写我已经在代码块中说明了,大家仔细阅读

 1     private  class NetCallBack1 implements CallBack {
 2         @Override
 3         public void onSuccess(String respone) {
 4            这里是请求成功是执行的操作
 5            记住网络请求都是异步的,所以加载数据更新界面的功能都必须在这里实现
 6            不然会报空指针的错误
 7         }
 8
 9        @Override
10        public void onError(VolleyError error) {
11             这里是执行网络请求不成功后执行的操作
12        }
13 }    

    2、利用工厂模式进行请求网络

1 VolleyUtil.get(你请求的网络接口)
2                 .setCallBack(new NetCallBack())//这是上一步自定义的回调函数
3                 .build()
4                 .setPriority(Request.Priority.HIGH)
5                 .addRequestHeader("apikey","你自己的apiley")
6                 .start();

  <2>再讲一下如何使用post请求

    我这里就直接在在调用的时候就实现了callback接口,不再单独实现了

 1 VolleyUtil.post("http://192.168.191.1:8080/Server/doReg.jsp")
 2                  .setCallBack(new CallBack() {
 3                     @Override
 4                     public void onSuccess(String respone) {
 5                           请求成功是执行的步骤
 6                     }
 7
 8                    @Override
 9                     public void onError(VolleyError error) {
10                           请求不成功时执行的步骤
11                     }
12                 })
13                 .build()
14                 .addParams("name","张三")
15                 .addParams("pwd","12345678")
16                 .setTag("post")
17                 .start();

其中addParams方法是在第二步NetRequest中有专门的定义,代码可以在第一步中寻找到

  至此使用volley框架请求网络的步骤就算完成了,看起来定义比较麻烦,但是这是一劳永逸的,你在工程中只需要定义一遍,就可以在工程中需要网络请求的地方直接可以调用,注意的是网络请求还需要设置请求权限(如果大家不清楚如何设置可以去我写的关于定位的那篇文章中找到),这个需要在清单文件中申明,还有是如果你想一劳永逸还需要给工具类VolleyUtil进行初始化,这段代码可以放在全局类中即Application类中,代码如下:

 1 /**
 2  * Created by zhangdi on 2016/8/23.
 3  */
 4 public class MyApplication extends Application {
 5
 6     @Override
 7     public void onCreate() {
 8         super.onCreate();
 9         VolleyUtil.init(this);//初始化请求队列
10     }
11
12 }

  好了,到此自定义并使用Volley框架请求网络数据的步骤就算全部结束了,当然网络请求框架有很多种,Volley并不是最好的,但是它的优点也特别显明,所以在对于轻量级的请求网络数据时,使用Volley框架还是弊大于利的,这里笔者还是比较建议使用的。还是如果大家感觉这篇文章还不错的话就麻烦给推荐一下,若是有哪些地方总结的不对或是知识点有错误的地方还是希望大家评论指正,谢谢。

时间: 2024-08-04 18:41:26

安卓中自定义并使用Volley框架请求网络的相关文章

安卓开发时酷派手机不打印请求网络信息问题的解决

在做安卓开发的时候,肯定要用到调试了,但是我买的酷派大神F1居然不打印请求网络的日志,在百度上寻找了一下解决办法最终解决: 解决方案: 拨号盘输入*20121220#   ->  选择日记输出级别  ->  选择Java log level -> 选择LOGD即可 这样就能够打印日志了,这是因为机子出厂的时候做了一定的限制,重新设置一下就行了,我一开始还以为是Eclipse的版本问题呢,试了一下三星的手机,发现没问题,就只有是手机的问题了,就找到了这个解决方法!

原 Volley框架之网络请求和图片加载

Volley是 Google 推出的 Android 异步网络请求框架和图片加载框架. Volley的特性 (1).封装了的异步的请求API.Volley 中大多是基于接口的设计,可配置性强.(2).一个优雅和稳健的请求队列,一定程度符合 Http 规范,包括请求头的处理,缓存机制的支持等.(3).自定义的网络图像加载视图(NetworkImageView,ImageLoader等) .(4). 提供简便的图片加载工具. 本案例包含get,post请求和几种网络图片加载的方式,效果如图:   

035 Android Volley框架进行网络请求

1.volley入门介绍 开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高. Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行

Android网络通信Volley框架源码浅析(三)

尊重原创 http://write.blog.csdn.net/postedit/26002961 通过前面浅析(一)和浅析(二)的分析,相信大家对于Volley有了初步的认识,但是如果想更深入的理解,还需要靠大家多多看源码. 这篇文章中我们主要来研究一下使用Volley框架请求大量图片的原理,在Android的应用中,通过http请求获取的数据主要有三类: 1.json 2.xml 3.Image 其中json和xml的获取其实原理很简单,使用Volley获取感觉有点大财小用了,了解Volle

Android Volley框架的使用

在Android开发中,经常要通过HTTP请求访问网络.为了使通过HTTP请求访问网络的过程更加简单,2013提出了新的HTTP通信框架--Volley.Volley使用起来非常简单,适用于网络访问频繁.通信数据量小的情况. 下载volley.jar文件并导入工程,加上访问网络的权限,就可以使用Volley框架访问网络了. <uses-permission android:name="android.permission.INTERNET"/> 访问的过程也十分简单:(1)

安卓中常用权限

安卓中常用权限 添加WiFi以及访问网络的权限:  <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" ></uses-permission>  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" ></uses-permission>  &l

Volley框架实现Http的get和post请求

一: volley简介: Google I/O 2013上,Volley发布了.Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮.这是Volley名称的由来: a burst or emission of many things or a large amount at once volley适合于数据量比较小,比较频繁的系统使用,可适用于各种管理平台,每次请求数据量小,但是请求频繁的管理系统 简化了安卓原生态的http请求方式. 二:volley的使用语法: 1

Google Volley框架之https请求

先插一句.Google出的volley框架本身是支持https请求的,可是仅仅是针对有第三方机构认证过的. 假设自己随便在网上搞的一个证书,那volley是不支持请求的. 本文讲下怎样让volley支持自己搞的https证书. 改动volley源代码:com.android.myvolley.toolbox.HurlStack /** * Create an {@link HttpURLConnection} for the specified {@code url}. */ protected

Volley框架支持HTTPS请求。

第一次写帖子,嘿嘿. 最近了解到google2013IO大会出了个网络框架,正好项目也需要用到,就看了下. 最后发现接口都是HTTPS的,但是Volley默认是不支持HTTPS,网上找了好久,都没有对Volley HTTPS请求做解答. 所以分享下心得. bvin大神已经分析框架的帖子 在下面的传送: 谷歌Volley网络框架讲解——第一篇 谷歌Volley网络框架讲解——Network及其实现类 谷歌Volley网络框架讲解——网络枢纽 谷歌Volley网络框架讲解——HttpStack及其实