我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据。Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高。不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码。Android开发团队也是意识到了有必要将HTTP的通信操作再进行简单化,于是在2013年Google I/O大会上推出了一个新的网络通信框架——Volley。既可以非常简单地进行HTTP通信,也可以轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。
[b]下面来说说Volley的用法:[/b]
1.获取到一个RequestQueue对象,这里拿到的RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。
2.创建一个StringRequest对象用来发出一条HTTP请求,StringRequest的构造函数需要传入三个参数,第一个参数就是目标服务器的URL地址,第二个参数是服务器响应成功的回调,第三个参数是服务器响应失败的回调。
3.将这个StringRequest对象添加到RequestQueue里面
//1.获取一个RequestQueue对象
RequestQueue mRequestQueue = Volley.newRequestQueue(context);
//2.创建一个StringRequest对象
StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://www.baidu.com", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//服务器响应成功,将服务器返回的响应转换成一个Java Bean通过EventBus传递给事件监听处理
EventBus.getDefault().post(new ResultBeen(response));
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//服务器响应失败,将服务器返回的响应转换成一个Java Bean通过EventBus传递给事件监听处理
EventBus.getDefault().post(new ResultBeen(error.getMessage()));
}
});
//3.将StringRequest对象添加到RequestQueue里面
mRequestQueue.add(stringRequest);
[b]Java Bean代码:[/b]
public class ResultBeen {
private int result;
private String response;
public ResultBeen(String response) {
this.response =response;
}
public int getResult() {
return result;
}
public void setResult(int result) {
this.result = result;
}
public String getResponse() {
return response;
}
@Override
public String toString() {
return response;
}
}
[b]事件监听处理:[/b]
@DebugLog
public void onEventMainThread(ResultBeen event) {
this.tv_result.setText(event.getResponse());
}
4.另外,由于Volley是要访问网络的,因此千万不要忘记在你的AndroidManifest.xml中添加如下权限
<uses-permission android:name="android.permission.INTERNET" />