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

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

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

 private Priority priority;
private Map<String,String> headers ;
private Map<String,String> params; /**
* 初始化全局变量
*/
private void init(){
priority = Priority.NORMAL;
headers = new HashMap<>();
params = new HashMap<>();
}

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

 public NetRequest(int method, String url, Response.Listener<String> listener, Response.ErrorListener errorListener) {
super(method, url, listener, errorListener);
init();
} public NetRequest(String url, Response.Listener<String> listener, Response.ErrorListener errorListener) {
super(url, listener, errorListener);
init();
}

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

 //设置优先级
@Override
public Priority getPriority() {
return priority;
}

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

 //为请求添加头信息的方法
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return headers;
} @Override
public Map<String, String> getParams()throws AuthFailureError{
return params;
} public NetRequest setPriority(Priority priority){
this.priority = priority;
return this;
} public NetRequest addRequestHeader(String key,String value){
this.headers.put(key,value);
return this;
} public NetRequest addParams(String key,String value){
this.params.put(key, value);
return this;
}

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

 /**
* 发送请求
*/
public void start(){
VolleyUtil.start(this);
}

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

 //构造者模式
public static class Builder{   private String url;
  private int method;
  private CallBack callBack;   public Builder setCallBack(CallBack callBack){
    this.callBack = callBack;
    return this;
}
  public Builder setUrl(String url){
    this.url = url;
    return this;
}
  public Builder setMethod(int method){
    this.method = method;
    return this;
}
20  }

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

       /**
* 创建一个NetRequest请求网络
* @return NetRequest
*/
public NetRequest build(){
NetRequest nr = new NetRequest(
method,
url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (callBack!=null){
callBack.onSuccess(response);
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (callBack!=null){
callBack.onError(error);
}
}
});
return nr;
}

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

 import com.android.volley.VolleyError;

     /**
* Created by zhangdi on 2016/8/8.
*/
public interface CallBack {
public void onSuccess(String respone);
public void onError(VolleyError error);
}

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

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

 private static RequestQueue requestQueue;
/**
* 初始化请求队列
* @param mContext
*/
public static void init(Context mContext){
if (requestQueue==null){
requestQueue = Volley.newRequestQueue(mContext);
}
}

  2、设置get请求方法

    /**
* get请求
* @param url
* @return
*/
public static NetRequest.Builder get(String url){
return new NetRequest.Builder()
.setMethod(Request.Method.GET)
.setUrl(url);
}

  3、设置post请求方法

     /**
* post请求
* @return
*/
public static NetRequest.Builder post(String url){
return new NetRequest.Builder()
.setMethod(Request.Method.POST)
.setUrl(url);
}

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

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

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

     //方法重载
public static void cancel(Object tag){
requestQueue.cancelAll(tag);
} public static void cancel(RequestQueue.RequestFilter filter){
requestQueue.cancelAll(filter);
}

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

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

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

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

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

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

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

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

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

 VolleyUtil.post("http://192.168.191.1:8080/Server/doReg.jsp")
.setCallBack(new CallBack() {
@Override
public void onSuccess(String respone) {
请求成功是执行的步骤
} @Override
public void onError(VolleyError error) {
请求不成功时执行的步骤
}
})
.build()
.addParams("name","张三")
.addParams("pwd","12345678")
.setTag("post")
.start();

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

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

 /**
* Created by zhangdi on 2016/8/23.
*/
public class MyApplication extends Application { @Override
public void onCreate() {
super.onCreate();
VolleyUtil.init(this);//初始化请求队列
} }

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

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

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

    Volley是 Google 推出的 Android 异步网络请求框架和图片加载框架. Volley的特性 (1).封装了的异步的请求API.Volley 中大多是基于接口的设计,可配置性强.(2). ...

  2. 035 Android Volley框架进行网络请求

    1.volley入门介绍 开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行HTTP通 ...

  3. Android Volley框架的使用(1)

    在Android开发中,经常要通过HTTP请求访问网络.为了使通过HTTP请求访问网络的过程更加简单,2013年提出了新的HTTP通信框架--Volley.Volley使用起来非常简单,适用于网络访问 ...

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

    尊重原创 http://write.blog.csdn.net/postedit/26002961 通过前面浅析(一)和浅析(二)的分析.相信大家对于Volley有了初步的认识,可是假设想更深入的理解 ...

  5. Android开发利用Volley框架下载和缓存网络图片

    2013年Google I/O大会上推出了一种新的网络通信框架——Volley,Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可 ...

  6. 【安卓网络请求开源框架Volley源码解析系列】定制自己的Request请求及Volley框架源码剖析

    通过前面的学习我们已经掌握了Volley的基本用法,没看过的建议大家先去阅读我的博文[安卓网络请求开源框架Volley源码解析系列]初识Volley及其基本用法.如StringRequest用来请求一 ...

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

    一: volley简介: Google I/O 2013上,Volley发布了.Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮.这是Volley名称的由来: a bu ...

  8. Volley框架支持HTTPS请求。

    第一次写帖子,嘿嘿. 最近了解到google2013IO大会出了个网络框架,正好项目也需要用到,就看了下. 最后发现接口都是HTTPS的,但是Volley默认是不支持HTTPS,网上找了好久,都没有对 ...

  9. 安卓高级2 Volley框架的使用案例

    初始化类: MyApp.java package qianfeng.com.day37_volley_pull.app; import android.app.Application; import ...

随机推荐

  1. Django1.9开发博客(6)- 模板继承

    模板继承就是网站的多个页面可以共享同一个页面布局或者是页面的某几个部分的内容.通过这种方式你就需要在每个页面复制粘贴同样的代码了. 如果你想改变页面某个公共部分,你不需要每个页面的去修改,只需要修改一 ...

  2. hibernateValidate

    1.创建主页面 <form action="${pageContext.request.contextPath }/first.do" method="post&q ...

  3. springMVC 源码解读系列(一)初始化

    先看看DispatcherServlet的类机构: 初始化时序图: servlet初始化会调用 init 方法,换句话说就是springMVC进行初始化的时候首先会去执行HttpServletBean ...

  4. Android开发--ScrollView的应用

    1.简介 当内容无法全部显示时,需要采取滚动的方式获取其与内容.其中,ScrollView为垂直滚动控件,HorizontalScrollView为水平滚动控件. 2.构建

  5. iOS开发UI篇—ios应用数据存储方式(偏好设置)

    iOS开发UI篇—ios应用数据存储方式(偏好设置) 一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用 ...

  6. css属性选择器

    1.E[att] 选择具有attr属性的E元素.2.E[att="val"] 选择具有att属性且属性值等于val的E元素3.E[att~="val"] 选择具 ...

  7. 【C语言学习】-06 函数

    函数分类.函数声明和定义.函数调用,形参实参.函数嵌套调用

  8. NuSOAP与PHPRPC比较(转)

    因为看到有人问 Nusoap 和 PHPRPC 的比较,为了让大家能够更清楚地了解 Nusoap 和 PHPRPC 的关系,所以在这里做一个简要的说明性介绍,所写的内容也不是面面俱到的,只写了一些主要 ...

  9. MVC记录

    MVC这三层分别要完成哪些工作呢? 1.M层 模型(更多的是数据库模型) (1)创建数据库.创建相应的表 (2)完成针对数据库各个表的增.删.改.查的操作类 (3)映射数据库各个表的实体类(这个实体类 ...

  10. Flex文件结构

    一.文件.目录及其作用.project:描述工程信息,如 本工程名称.工程注释.相关工程信息.编译参数等 .flexProperties:记录与Flex本身相关的信息 .actionScriptPro ...