Volley学习笔记

介绍

Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,不过HttpURLConnection和HttpClient的用法还是有些复杂的,所以就有了Android网络通信框架,比如说AsyncHttpClient,它把HTTP所有的通信细节全部封装在了内部,我们只需要简单调用几行代码就可以完成通信操作了。再如Universal-Image-Loader,它使得在界面上显示网络图片的操作变得极度简单,开发者不用关心如何从网络上获取图片,也不用关心开启线程、回收图片资源等细节。

在2013年Google I/O大会上推出了一个新的网络通信框架——Volley,Volley可以说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标是适合进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。

Volley的功能:

1.Json、图像等的异步下载;

2.网络请求的排序(scheduling);

3.网络请求的优先级处理;

4.缓存;

5.多级别取消请求;

6.Activity生命周期的联动(Activity结束时同时取消所有网络请求);


使用

1.从git克隆源码,打包成jar包导入项目即可。注意,这个库要求最低SDK版本为Froyo,即至少要设置android:minSdkVersion为8以上。

地址:git clone https://android.googlesource.com/platform/frameworks/volley


2.获取RequestQueue对象,RequestQueue mQueue = Volley.newRequestQueue(context); 

注意,这里拿到的RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上在每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了。

  1. StringRequest stringRequest = new StringRequest("http://www.baidu.com",  
  2.                         new Response.Listener<String>() {  
  3.                             @Override  
  4.                             public void onResponse(String response) {  
  5. //请求成功的回调
  6.                                 Log.d("TAG", response);  
  7.                             }  
  8.                         }, new Response.ErrorListener() {  
  9.                             @Override  
  10.                             public void onErrorResponse(VolleyError error) {  
  11. //响应失败的回调
  12.                                 Log.e("TAG", error.getMessage(), error);  
  13.                             }  
  14.                         }); 

将StringRequest对象添加到RequestQueue里面,

mQueue.add(stringRequest);

另外,由于Volley是要访问网络的,因此不要忘记在你的AndroidManifest.xml中添加权限,

<uses-permission android:name="android.permission.INTERNET" />


3.Get和Post请求

post请求:

StringRequest stringRequest = new StringRequest(Method.POST, url,  listener, errorListener); 

需要在StringRequest的匿名类中重写getParams()方法,在这里设置POST参数就可以了。

  1. StringRequest stringRequest = new StringRequest(Method.POST, url,  listener, errorListener) {  
  2.     @Override  
  3.     protected Map<String, String> getParams() throws AuthFailureError {  
  4.         Map<String, String> map = new HashMap<String, String>();  
  5.         map.put("params1""value1");  
  6.         map.put("params2""value2");  
  7.         return map;  
  8.     }  
  9. };  
get请求

mQueue = Volley.newRequestQueue(getApplicationContext());
mQueue.add(new JsonObjectRequest(Method.GET, url, null,
            new Listener() {
                @Override
                public void onResponse(JSONObject response) {
                    Log.d(TAG, "response : " + response.toString());
                }
            }, null));
mQueue.start();

4.JsonRequest的用法

JsonRequest继承自Request类,不过由于JsonRequest是一个抽象类,因此无法直接创建它的实例,那么只能从它的子类入手。JsonRequest有两个直接的子类,JsonObjectRequest和JsonArrayRequest,一个是用于请求一段JSON数据的,一个是用于请求一段JSON数组的。

  1. JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://m.weather.com.cn/data/101010100.html"null,  
  2.         new Response.Listener<JSONObject>() {  
  3.             @Override  
  4.             public void onResponse(JSONObject response) {  
  5.                 Log.d("TAG", response.toString());  
  6.             }  
  7.         }, new Response.ErrorListener() {  
  8.             @Override  
  9.             public void onErrorResponse(VolleyError error) {  
  10.                 Log.e("TAG", error.getMessage(), error);  
  11.             }  
  12.         });  
  1. 再将这个JsonObjectRequest对象添加到RequestQueue里就可以了。
  2. mQueue.add(jsonObjectRequest);  
未完待续...





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值