NetworkImageView为什么有的网络图片能自动缓存有的却不行,是要设置什么吗?
比如这张图就可以:http://pic16.nipic.com/20110827/3995638_135629006375_2.jpg
而这张图就不行了:http://img.xiaba.cvimage.cn/4cbc5a1522b57cd3760c0000.jpg
NetworkImageView 自动缓存图片
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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表示缓存时间为永久。需要注意的是,设置了缓存策略之后,图片可能无法及时更新,需要开发者自行处理缓存过期的情况
解决 无用评论 打赏 举报