wuqiong 2015-03-31
我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据。Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高。不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码。Android开发团队也是意识到了有必要将HTTP的通信操作再进行简单化,于是在2013年GoogleI/O大会上推出了一个新的网络通信框架——Volley。既可以非常简单地进行HTTP通信,也可以轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。
下面来说说Volley的用法:
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);
JavaBean代码:
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; } }
事件监听处理:
@DebugLog public void onEventMainThread(ResultBeen event) { this.tv_result.setText(event.getResponse()); }
4.另外,由于Volley是要访问网络的,因此千万不要忘记在你的AndroidManifest.xml中添加如下权限
<uses-permission android:name="android.permission.INTERNET" />