NetworkImageView 自动缓存图片

NetworkImageView为什么有的网络图片能自动缓存有的却不行,是要设置什么吗?
比如这张图就可以:http://pic16.nipic.com/20110827/3995638_135629006375_2.jpg
而这张图就不行了:http://img.xiaba.cvimage.cn/4cbc5a1522b57cd3760c0000.jpg

NetworkImageView是Volley库中提供的用于加载网络图片的控件,它默认使用Volley的缓存机制进行图片的自动缓存。如果有些网络图片不能自动缓存,可以考虑以下因素:

1.图片的缓存策略:有些网站会设置缓存策略,禁用浏览器缓存,导致图片不能被缓存。

2.图片URL的变化:如果同一张图片URL每次请求都有所变化,那么NetworkImageView的缓存机制无法成功缓存图片。

如果以上原因排除均无效,可以通过设置Volley的缓存策略来强制缓存图片,示例如下:

// 创建一个RequestQueue对象
RequestQueue queue = Volley.newRequestQueue(context);

// 创建一个ImageLoader对象,设置缓存策略
ImageLoader imageLoader = new ImageLoader(queue, new ImageLoader.ImageCache() {
    private final LruCache<String, Bitmap> cache = new LruCache<String, Bitmap>(20);

    @Override
    public Bitmap getBitmap(String url) {
        return cache.get(url);
    }

    @Override
    public void putBitmap(String url, Bitmap bitmap) {
        cache.put(url, bitmap);
    }
});

// 加载网络图片
NetworkImageView imageView = findViewById(R.id.image_view);
String imageUrl = "https://www.example.com/image.png";
imageLoader.get(imageUrl, ImageLoader.getImageListener(imageView, R.drawable.default_image, R.drawable.error_image));

// 设置缓存策略
imageLoader.setCachePolicy(Cache.Entry.CacheEntry.CACHE_TIME_IN_MS);

其中,Cache.Entry.CacheEntry.CACHE_TIME_IN_MS是Volley内置的一个缓存策略,表示缓存时间为5分钟。如果想要缓存时间更长,可以设置更长的时间,例如Cache.Entry.CacheEntry.CACHE_TIME_FOR_FOREVER表示缓存时间为永久。需要注意的是,设置了缓存策略之后,图片可能无法及时更新,需要开发者自行处理缓存过期的情况