欢迎转载,转载请标明出处^_^
2013年Google在 I/O大会上发布了Volley框架,它是Android平台上的开源网络通信库,封装了Http网络请求,异步任务,缓存,图片下载等功能。特点是能使网络通信更简单,更快速,更稳定。尤其适合处理数据量不大,但是网络通信频繁的场景。
Android-Volley的功能如下:
1:JSON,图像等的异步下载;
2: 网络请求的排序(scheduling)
3:缓存
4: 网络请求的优先级处理
5:多级别取消请求
6:和Activity生命周期的联动
Android-Volley的使用步骤::
1:加载
Volley.jar
至项目libs
目录,添加依赖。
2:创建RequestQueue
请求队列。
3:创建Request
对象。Request是抽象类,我们常用的子类对象有StringRequest
,ImageRequet
,JsonArrayRequest
,JsonObjectRequest
。
将Request
对象添加到RequestQueue
中。
注意当使用Volley进行Post
请求并传递参数的时候,需要重写Request
对象的getParams
方法。
1:StringRequest的用法:
使用StringRequest
进行网络请求的实现过程如下:
1、 创建RequestQueue
请求队列
代码:RequestQueue requestQueue = Volley.newRequestQueue(this);
2、 创建StringRequest
对象,构造函数说明如下
1:
StringRequest(int method, //请求方式, 0:GET, 1:POST默认为Get
String url, //请求网址
Response.Listener listener, //响应成功监听接口
Response.ErrorListener errorListener)//响应错误监听接口2:
StringRequest(String url, //网址
Response.Listener listener, //响应成功监听接口
Response.ErrorListener errorListener)//响应错误监听接口
3、将StringRequest
对象添加到请求队列中
代码:requestQueue.add(StringRequest);
StringRequest小实例(GET请求):
private void stringRequest(String url){
StringRequest stringRequest = new StringRequest(url,
new Response.Listener() {
//onResponse(String s)中的s是系统自动调用并返回的字符串,可以是json,html,xml等等。
@Override
public void onResponse(String s) {
//这里执行网络连接成功后的操作,比如读取数据等,这里是笔者基于本地的测试,直接复制代码不可运行,读者可自己实现其他功能,例如可返回百度首页的html代码
try {
JSONObject jsonObject = new JSONObject(s);
if (jsonObject.has("name")){
Toast.makeText(getBaseContext(),jsonObject.get("name").toString(),Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
//这里执行网络连接失败的操作,比如一些提示等等。
Toast.makeText(getBaseContext(),"网络异常",Toast.LENGTH_SHORT).show();
}
}
);
//添加请求
requestQueue.add(stringRequest);
}
StringRequest小实例(POST请求):
在Volley框架中,POST请求方式也使用StringRequest
对象来完成,StringRequest
继承自基类Request
, Request
类里面有一个getParams()
方法用于获取参数,但是并没有为我们实现这个方法,这就需要我们自定义一个类去继承StringRequet
,并且重写getParams()
方法。
实例:
新建类VolleyStringPost
继承StringRequest
:
public class VolleyStringPost extends StringRequest {
private Map map;
public VolleyStringPost(String url,
Response.Listener listener,
Response.ErrorListener errorListener) {
//Method.POST是post请求
//这里系统提供了两个构造,另一个构造中有int method参数,0:get,1:post,默认是get
//这里选择无int method的构造,但在super()中传入了Method.POST(系统值,值为1),也就规定了该方法就是post方式
//这样的好处,不用再传入int method参数
super(Method.POST,url, listener, errorListener);
map = new HashMap();
}
//该方法自己定义,用于传入参数
public void putValues(String key,String values){
map.put(key,values);
}
//post方式必须重写该方法,里面只需返回map即可,系统自动调用
@Override
protected Map getParams() throws AuthFailureError {
return map;
}
}
调用:
//用法同get方式一样
private void stringRequestPost(String url){
//这里实例的是 VolleyStringPost ,因为继承StringRequest,所有结构同StringRequest一样。
VolleyStringPost post = new VolleyStringPost(url,
new Response.Listener() {
@Override
public void onResponse(String s) {
//连接成功操作
Toast.makeText(getBaseContext(),s,Toast.LENGTH_SHORT).show();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
//连接失败操作
Toast.makeText(getBaseContext(),"网络异常",Toast.LENGTH_SHORT).show();
}
}
);
//调用VolleyStringPost 中的putValues()方法,传入参数
post.putValues("option","getUser");
//添加请求
requestQueue.add(post);
}
以上就是Android Volley框架的基本介绍及其get,post方式的使用,若有补充,会持续更新。