您的位置:首页 > 其它

Volley框架全解析

2015-09-05 16:13 225 查看


1. 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的表现就会非常糟糕。

下图所示的这些应用都是属于数据量不大,但网络通信频繁的,因此非常适合使用Volley。


2. 下载Volley view  

3.   Volley提供的功能    

   
  1、封装了的异步的RESTful 请求API;
   2、一个优雅和稳健的请求队列;
   3、一个可扩展的架构,它使开发人员能够实现自定义的请求和响应处理机制;
   4、能够使用外部HTTP Client库;
   5、缓存策略;
   6、自定义的网络图像加载视图(NetworkImageView,ImageLoader等);
4.Volley实例
 
 1 加载json<span style="font-weight: bold;"> </span>public void getJson() {
RequestQueue requestQueue = Volley.newRequestQueue(this);
String url = "http://192.168.206.1:8080/Lashou/city";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
System.out.println(response.toString());
}
}, new Response.ErrorListener() {

@Override
public void onErrorResponse(VolleyError arg0) {
System.out.println("错误");

}
});

requestQueue.add(jsonObjectRequest);

}    
   2.异步加载图片
<span style="font-size:18px;"> public void loadImage() {
String url = "http://img4.imgtn.bdimg.com/it/u=4091019900,2240164028&fm=21&gp=0.jpg";
RequestQueue requestQueue = Volley.newRequestQueue(this);

final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>(
20);
ImageCache imageCache = new ImageCache() {

@Override
public void putBitmap(String key, Bitmap value) {
lruCache.put(key, value);

}

@Override
public Bitmap getBitmap(String key) {
return lruCache.get(key);
}
};

ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache);

ImageListener imageListener = imageLoader.getImageListener(mImg,
R.drawable.ic_launcher, R.drawable.ic_launcher);
imageLoader.get(url, imageListener);

}</span>    3.使用NetWorkImageView加载图片(Volley自定义的加载网络视图,注意在编译xml时作为自定义view使用。替代ImageVIew,好处,这个框架被父类控件dispach时,自动取消网络请求,不用担心生命周期问题)
<strong> </strong> public void loadNewWorkImageView() {
String url = "http://img4.imgtn.bdimg.com/it/u=4091019900,2240164028&fm=21&gp=0.jpg";
RequestQueue requestQueue = Volley.newRequestQueue(this);
final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>(
20);
ImageCache imageCache = new ImageCache() {

@Override
public void putBitmap(String key, Bitmap value) {
lruCache.put(key, value);

}

@Override
public Bitmap getBitmap(String key) {
return lruCache.get(key);
}
};

ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache);
mNetworkImageView.setTag("url");
mNetworkImageView.setImageUrl(url, imageLoader);

}4 总结
 Volley适合网络请求频繁但数据量不大的网络请求,要根据具体情况使用。
  
 

 源码点击下载

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: