Volley简介及Request基本用法

      Google I/O 2013上,Volley发布了。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。这是Volley名称的由来: a burst or emission of many things or a large amount at once,volley适合数据量小,通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。

 1. Volley的工作流程图,如下图所示。

Android 网络通信框架Volley完全解析(一)_第1张图片

2.volley包含的功能

JSON,图像等的异步下载;
网络请求的排序(scheduling)
网络请求的优先级处理
缓存
多级别取消请求
和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)

3.StringRequest的用法

 前面已经说过,Volley的用法非常简单,那么我们就从最基本的HTTP通信开始学习吧,即发起一条HTTP请求,然后接收HTTP响应。首先需要获取到一个RequestQueue对象,可以调用如下方法获取到:
       RequestQueue mQueue = Volley.newRequestQueue(context); 
     注意这里拿到的RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上在每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了。      接下来为了要发出一条HTTP请求,我们还需要创建一个StringRequest对象,如下所示:
       StringRequest stringRequest = new StringRequest("http://www.baidu.com",                          new Response.Listener() {                              @Override                              public void onResponse(String response) {                                  Log.d("TAG", response);                              }                          }, new Response.ErrorListener() {                              @Override                              public void onErrorResponse(VolleyError error) {                                  Log.e("TAG", error.getMessage(), error);                              }                          });  
     可以看到,这里new出了一个StringRequest对象,StringRequest的构造函数需要传入三个参数,第一个参数就是目标服务器的URL地址,第二个参数是服务器响应成功的回调,第三个参数是服务器响应失败的回调。其中,目标服务器地址我们填写的是百度的首页,然后在响应成功的回调里打印出服务器返回的内容,在响应失败的回调里打印出失败的详细信息。     最后,将这个StringRequest对象添加到RequestQueue里面就可以了,如下所示:
                     mQueue.add(stringRequest);  

一个最基本的HTTP发送与响应的功能就完成了。你会发现根本还没写几行代码就轻易实现了这个功能,主要就是进行了以下三步操作:
1. 创建一个RequestQueue对象。
2. 创建一个StringRequest对象。
3. 将StringRequest对象添加到RequestQueue里面。
        大家都知道,HTTP的请求类型通常有两种,GET和POST,刚才我们使用的明显是一个GET请求,那么如果想要发出一条POST请求应该怎么做呢?StringRequest中还提供了另外一种四个参数的构造函数,其中第一个参数就是指定请求类型的,我们可以使用如下方式进行指定:
      StringRequest stringRequest = new StringRequest(Method.POST, url,  listener, errorListener);  
             可是这只是指定了HTTP请求方式是POST,那么我们要提交给服务器的参数又该怎么设置呢?很遗憾,StringRequest中并没有提供设置POST参数的方法,但是当发出POST请求的时候,Volley会尝试调用StringRequest的父类——Request中的getParams()方法来获取POST参数,那么解决方法自然也就有了,我们只需要在StringRequest的匿名类中重写getParams()方法,在这里设置POST参数就可以了,代码如下所示:
    StringRequest stringRequest = new StringRequest(Method.POST, url,  listener, errorListener) {      @Override      protected Map getParams() throws AuthFailureError {          Map map = new HashMap();          map.put("params1", "value1");          map.put("params2", "value2");          return map;      }  };  

4. JsonRequest的用法

        学完了最基本的StringRequest的用法,我们再来进阶学习一下JsonRequest的用法。类似于StringRequest,JsonRequest也是继承自Request类的,不过由于JsonRequest是一个抽象类,因此我们无法直接创建它的实例,那么只能从它的子类入手了。JsonRequest有两个直接的子类,JsonObjectRequest和JsonArrayRequest,从名字上你应该能就看出它们的区别了吧?一个是用于请求一段JSON数据的,一个是用于请求一段JSON数组的。至于它们的用法也基本上没有什么特殊之处,先new出一个JsonObjectRequest对象,如下所示:
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://m.weather.com.cn/data/101010100.html", null,          new Response.Listener() {              @Override              public void onResponse(JSONObject response) {                  Log.d("TAG", response.toString());              }          }, new Response.ErrorListener() {              @Override              public void onErrorResponse(VolleyError error) {                  Log.e("TAG", error.getMessage(), error);              }          });  

      响应的数据就是以JSON格式返回的,然后我们在onResponse()方法中将返回的数据打印出来。最后再将这个JsonObjectRequest对象添加到RequestQueue里就可以了,如下所示:
                mQueue.add(jsonObjectRequest);  
     你应该发现了吧,JsonObjectRequest的用法和StringRequest的用法基本上是完全一样的,Volley的易用之处也在这里体现出来了,会了一种就可以让你举一反三,因此关于JsonArrayRequest的用法相信已经不需要我再去讲解了吧。








更多相关文章

  1. android添加文件打开方式以及参数传递
  2. android使用Navigation实现Fragment之间的跳转之二:参数传递
  3. Android客户端和服务器端数据交互的第一种方法
  4. Android 测试上传头像到服务器
  5. android Studio 使用gradle 参数解释及多渠道打包
  6. android将对象写入文件和从文件中读取对象数据
  7. Android从服务器获取图片的实例方法
  8. Android客户端连接PC服务器端(Socket连接)

随机推荐

  1. Android练习项目——知乎日报
  2. Android中的Shape和Selector的结合使用实
  3. Android最牛的开源整理
  4. 【Android】Android中shape的使用
  5. 安装Android sdk 4.4(19)出现问题的解决
  6. Android仿微信图片选择器(三)
  7. Android:EditText 多行显示及所有属性(不自
  8. Android 中的消息传递,详解广播机制
  9. Android分发机制
  10. android中编译资源文件的相关问题