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 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容