@jimbo
2015-09-08T22:19:43.000000Z
字数 1634
阅读 727
android
volley
我们平时在开发Android应用的时候都不可避免的都要需要用到网络技术,而多数情况下应用程序都会时候http协议来发送和接收网络数据。Android系统中主要提供了两种方式进行http通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中都有这两个类的身影,使用率非常高。
不过HttpURLConnection和httpClient的用法还是稍微有些复杂的,如果不进行适当的封装的话,很容易就会出不少的重复代码。于是乎,一些Android网络通信框架也就应运而生,比如说AsyncHttpClient,他把http所有的通信细节全部封装在内部,我们只需要简单的几行代码就可以完成通信操作了。在比如Universal-Image-Loader,它使得在界面上显示网络图片的操作变得极度简单,开发就不用关心如何从网络上获取图片,也不关心开启线程,回收图片资源等细节,Universal-Image-Loader已经把一切都做好了。
Android开发团队也是意识到了有必要将HTTP的通信操作再进行简单化,于是在2013年Google I/O大会上推出了一个新的网络通信框架——Volley。Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。
git clone http://android.googlesource.com/platform/frameworks/volley
volley的使用方法很简单,要想发送一个request请求,首先必须获取一个RequestQueue对象,可以调用如下方法获取到:
RequestQueue mQueue = Volley.newRequestQueue(context);
RequestQueue是一个请求队列对象,可以缓存所有的http请求,然后按照一定的算法并发的发出这些请求。RequestQueue内部设计非常适合高并发,因此我们不必为http请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上一个需要和网络交互的activity中创建一个RequestQueue就足够了。
接下来为了发送一条http请求,我们还需要创建一个StringRequest对象:
private void volleyString() {
// 这是一个get方法
// 如果要使用Post方法的话就要使用它的四个函数的构造方法,
// 在第一个参数的位置上指定请求方式。
StringRequest request = new StringRequest("http://www.baidu.com",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// TODO Auto-generated method stub
textView.setText(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
textView.setText(error.toString());
}
});
}