在上一篇中我们学习了Volley框架的环境搭建,以及如何使用Volley进行Json数据的请求,这一节我们来讲解一下如何使用Volley快速的实现网络图片的异步加载 。
编写一个方法,取名为loadImage(),并向其传递一个String类型的参数,该参数表示请求图片的url地址,主要代码如下:
<span style="font-size:18px;"> public void loadImage(String url){
RequestQueue requestQueue = Volley.newRequestQueue(this);
//缓存操作
final LruCache<String,Bitmap> lruCache = new LruCache<>(20);
//缓存文件
ImageLoader.ImageCache imageCache = new ImageLoader.ImageCache(){
//把图片添加到缓存列表
@Override
public void putBitmap(String s, Bitmap bitmap) {
lruCache.put(s,bitmap);
}
//从缓存列表中取出图片
@Override
public Bitmap getBitmap(String s) {
return lruCache.get(s);
}
};
ImageLoader imageLoader = new ImageLoader(requestQueue,imageCache);
ImageLoader.ImageListener listener =
imageLoader.getImageListener(imageView,R.mipmap.ic_launcher,R.mipmap.ic_launcher);
imageLoader.get(url,listener);
}
</span>
(1)与请求Json数据相同的是,我们都要先创建一个RequestQueue对象;
(2)然后我们使用到了LruCache对象,LruCache类在android.support.v4包中,这个类主要是用来缓存图片,它的主要算法原理是把最近使用的对象用强引用的方式存储在LinkedHashMap中,并且把最近最少使用的对象在缓存值达到预设值之前从内存中移除;
(3)创建ImageCache对象,并覆写putBitmap()和getBitmap()方法,分别用来添加图片到缓存列表以及从缓存列表中将图片取出;
(4)创建ImageLoader对象,传入RequestQueue和ImageQueue对象,ImageLoager内部使用了ImageRequest来实现,主要完成了图片的缓存功能,同时还可以过滤重复链接,避免重复发送请求;
(5)使用ImageLoader.getImageListener()方法创建一个ImageListener实例,三个参数分别是:ImageView实例,默认的图片的资源ID,请求失败时显示的图片的资源ID;
(6)在ImageLoader的get()方法中传入(5)中创建的ImageListener和图片的url地址,即可实现异步加载网络图片。
Volley框架还提供了一个NetWorkImageView控件,该控件继承与IamgeView,可以更加方便的加载网络图片并在界面中显示,感兴趣的话可以自己尝试一下,代码基本上与上面相同。
最后,大家一定不要忘了添加网络访问权限!!!