您的位置:首页 > 其它

Volley学习笔记

2015-06-17 18:22 190 查看
介绍
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对象就足够了。

StringRequest stringRequest = new StringRequest("http://www.baidu.com",

new Response.Listener<String>() {
@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);
}

});

将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参数就可以了。

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

@Override
protected Map<String, String> getParams() throws AuthFailureError {

Map<String, String> map = new HashMap<String, String>();
map.put("params1", "value1");

map.put("params2", "value2");
return map;

}
};

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数组的。

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://m.weather.com.cn/data/101010100.html", null,

new Response.Listener<JSONObject>() {
@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);
}

});

再将这个JsonObjectRequest对象添加到RequestQueue里就可以了。

mQueue.add(jsonObjectRequest);

未完待续...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: