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);
未完待续...
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);
未完待续...
相关文章推荐
- Linux包管理命令与Ubuntu下安装nginx的方法
- Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算
- C++ VC实现对话框窗口任意分割
- U盘启动安装linux系统
- Android Tab实现
- XMPP协议的原理介绍
- 《浪潮之巅》阅读笔记之二
- 184使用 Core Image 框架处理照片
- 极速Node.js:来自LinkedIn的10个性能提升秘籍
- php 处理二维数组(去除重复项,排序,转换,去空白等)
- solr集群环境搭建
- 【C语言学习】《C Primer Plus》第9章 函数
- 图
- 二维码生成Demo
- 网狐框架分析五--游戏大厅 150617
- php数组纵向转横向
- 11g rman blockrecover 的新特性
- apk混淆打包注意事项
- android中微信支付!! 其实没那么难
- CIPAddressCtrl类的使用(IP地址与CString的互相转化)