kinghhh 2015-11-04 03:47 采纳率: 0%
浏览 1789

NetworkImageView 自动缓存图片

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

  • 写回答

1条回答 默认 最新

  • GeekyGuru 2023-05-05 09:30
    关注

    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表示缓存时间为永久。需要注意的是,设置了缓存策略之后,图片可能无法及时更新,需要开发者自行处理缓存过期的情况

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大