准备工作
使用GIt将Volley源码下载下来,导入Eclipse,导出为jar包源码下载地址:https://android.googlesource.com/platform/frameworks/volley
jar包下载地址:http://download.csdn.net/detail/nobcdz/6482641
案例分析
接下来, 我们通过一个简单的案例,来了解一下Volley的使用方式。一.创建Demo程序
使用eclipse创建Android项目VolleyDemo,将Volley.jar包导入到项目中,如下图所示:
图1-1 VolleyDemo
二.快速开始
1.在MainActivity的Oncreate()方法中获取Request请求队列对象@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//
获取请求队列对象
RequestQueue queue = Volley.newRequestQueue(this);
}
Volley.newRequestQueue(this)获取请求队列,RequestQueue可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求,所以RequestQueue非常合适高并发。
2.对activity_mian.xml进行简单布局
图1-2 界面
3.JsonObjectRequest
用法private void jsonObjectRequestGET() {
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Method.GET,
"http://m.weather.com.cn/data/101030100.html",
null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//
连接成功,获取返回数据
Log.i("JSONObjectRequest", response.toString());
data.setText(response.toString());
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//
连接失败,获取失败的信息
Log.e("JSONObjectRequest", error.getMessage(),error);
data.setText(error.getMessage());
}
}){
@Override
public com.android.volley.Request.Priority getPriority() {
//
设置优先级
return Priority.HIGH;
}
};
queue.add(jsonObjectRequest);//
将
Request
添加到请求队列中
}
new JsonObjectRequest
表示创建一个JsonRequest请求,其中需要几个参数:Method.GET表示访问方式;http://m.weather.com.cn/data/101030100.html为访问路径,此路径为中国天气网获取天气的路径;null为访问参数,使用
JSONObject
封装,我这里没有用到,所以置为null;Listener为访问成功回调的方法,可在此方法的onResponse中获取返回的数据;ErrorListener为访问失败回调的方法,在onErrorResponse方法中可获取失败的信息;getPriority方法用来设置请求在请求队列中的优先级,queue.add(jsonObjectRequest)是将请求添加到请求队列中。
运行程序,点击jsonRequst按钮,得出返回结果,如下图所示:
图1-3 JsonObjectRequest执行结果图示
4.
StringRequest
的用法private void stringRequestPost() {
StringRequest stringRequest = new StringRequest(Method.POST,
"http://app.ihome86.com/php/index.php/register/get_code",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
data.setText(response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
data.setText(error.getMessage());
}
}){
@Override
protected Map<String, String> getParams()throws AuthFailureError {
Map<String, String> map = new HashMap<String, String>();
map.put("tel", "13121646499");
return map;
}
};
queue.add(stringRequest);
}
StringRequest请求的使用方式和JsonObjectRequest 使用方式相似,其中getParams()方法用于设置post访问时的访问参数。
运行程序,点击StringRequest按钮,得出返回结果,如下图所示:
图1-4 StringRequest执行结果图示
5.ImageRequest的用法
private void imageRequest() {
ImageRequest imageRequest = new ImageRequest(
"http://a.hiphotos.baidu.com/image/w%3D2048/sign=d2ebf5336963f6241c5d3e03b37ceaf8/902397dda144ad347976f98dd2a20cf430ad85ea.jpg",
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
imageView.setImageBitmap(bitmap);
}
}, 0, 0, Config.ARGB_8888, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
data.setText(error.toString());
}
});
queue.add(imageRequest);
}
ImageRequest的用法和JsonRequest、StringRequest基本一致,其中:第一个参数
为图片的地址,第二个参数为连接成功回调方法,第三个参数为图片最大宽度,第四个参数为图片最大高度,第五参数为图片的色彩模式,第六个参数为连接失败回调的方法
运行程序,点击ImageRequest按钮,得出返回结果,如下图所示:
图1-4 ImageRequest执行结果图示