您的位置:首页 > 理论基础 > 计算机网络

Volley的初级使用(Http请求数据)

2015-12-09 14:25 651 查看
Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,

既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader

一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,

它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的

网络操作,比如说下载文件等,Volley就不太适用了。

首先下载Volley的jar包

可以使用Git clone:Url的地址为:https://android.googlesource.com/platform/frameworks/volley

下载之后导入到eclipse中,然后在导出相应的jar包

或者直接下载该地址的jar包

然后将该jar包放入到Android工程项目的libs文件夹下,准备工作就完成了。接下来就要进行具体的代码实现了:

配置相应网络权限:<uses-permission android:name="android.permission.INTERNET" />

1.StringRequest的用法

Volley的用法非常简单,那么我们就从最基本的HTTP通信开始学习吧,即发起一条HTTP请求,然后接收HTTP响应。

首先需要获取到一个RequestQueue对象,可以调用如下方法获取到:
RequestQueue mQueue = Volley.newRequestQueue(context);
这里拿到的RequestQueue是一个请求队列对象,它可以缓存所有的http,并且并发的发送这些请求,而不必每次都创建一个Request请求对象,

在需要网络交互的Activity中创建一个RequestQueue对象就足够了。

接下来为了要发出一条HTTP请求,我们还需要创建一个StringRequest对象,如下所示:

StringRequest stringRequest = new StringRequest("http://www.sina.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);
}
});
这里new出了一个StringRequest对象,StringRequest的构造函数需要传入三个参数,第一个参数就是目标服务器的URL地址,第二个参数是服

务器响应成功的回调,第三个参数是服务器响应失败的回调。

当请求成功之后我们在onRespones中进行处理,如果请求失败我们就要在onErrorResponse中进行处理。

最后将这个StringRequest对象添加到RequestQueue里面就可以了,如下所示:
mQueue.add(stringRequest);
其实说到底就三个步骤:

1. 创建一个RequestQueue对象。

2. 创建一个StringRequest对象。

3. 将StringRequest对象添加到RequestQueue里面。

上面我们使用到的是Http的Get请求,要是发送Post请求,我们创建StringRequest对象时就需要使用下面这种方法:
StringRequest stringRequest = new StringRequest(Method.POST, url,  listener, errorListener);
StringRequest中并没有提供设置POST参数的方法,但是当发出POST请求的时候,Volley会尝试调用StringRequest的父类——Request中的

getParams()方法来获取POST参数,那么解决方法自然也就有了,我们只需要在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;
}
};
因为Volley是开源的,所以我们可以将自己的方法加入到Volley中去,实现自己的功能。

2.JsonRequest的用法

JsonRequest也是继承自Request类的,不过由于JsonRequest是一个抽象类,所以我们要通过创建它的子类JsonArrayRequest或者JsonObjectRequest的对象进行操作:
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://m.juhe.com.cn", 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);
服务器返回给我们的数据格式是Json格式的,并且onResponse()方法中携带的参数也正是一个JSONObject对象,之后只需要从JSONObject对象取出我们想要得到的那部分数据就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: