针对上一章的图片缓存,本章增加网络请求;如需完整的图片缓存,需要在本章的基础上,增加sd卡缓存。
public class ImageLoader {
ImageCache imageCache = new ImageCache();
ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
public void displayImage(final String url, final ImageView imageView){
Bitmap bitmap = imageCache.get(url);
if(bitmap != null){
imageView.setImageBitmap(bitmap);
return;
}
imageView.setTag(url);
//TODO 需另外增加sd卡缓存
executorService.submit(new Runnable() {
@Override
public void run() {
Bitmap bitmap = downloadImage(url);
if (bitmap == null){
return;
}
if(imageView.getTag().equals(url)){
imageView.setImageBitmap(bitmap);
}
imageCache.put(url,bitmap);
}
});
}
//TODO 如需扩展,需另外建立一个类,用来管理下载,本类只做图片加载赋值
public Bitmap downloadImage(String imageUrl){ Bitmap bitmap = null; try{ URL url = new URL(imageUrl); final HttpURLConnection connection = (HttpURLConnection)url.openConnection(); bitmap = BitmapFactory.decodeStream(connection.getInputStream()); connection.disconnect(); }catch (Exception e){ e.printStackTrace(); } return bitmap; }}