我有一个应用程序,可以在列表视图中的每个项目上加载图像,我使用Volley让我的生活更轻松;如果之前已经下载了图像,我需要从磁盘加载图像。
问题:它不会工作。它需要重新下载图像。即使退出应用程序,我也需要保存图像。
奇怪:它仅适用于一个特定图像(并且与尺寸无关)!
我使用的是什么:我使用此网站对此进行了模式化:https://github.com/rdrobinson3/VolleyImageCacheExample。
守则:
String godzilla = "http://vineland.pynchonwiki.com/wiki/images/c/cf/Godzilla.jpg";
//String meme = "http://upload.wikimedia.org/wikipedia/en/d/d7/Meme_Many_Journeys.jpg";
ImageCacheManager.getInstance().getImageLoader().get(godzilla, new ImageLoader.ImageListener() {
@Override
public void onResponse(ImageLoader.ImageContainer imageContainer, boolean b) {
viewHolder.backgroundImage = imageContainer.getBitmap();
updateBackgroundImage(viewHolder, viewHolder.backgroundImage, object);
updateLayoutAlignmentParams(viewHolder);
}
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
if(viewHolder.backgroundImage != null)
updateBackgroundImage(viewHolder, viewHolder.backgroundImage, object);
我已经尝试过meme网站,但仍然存在问题。我有一个特定的网站,其中包含奇怪的图像。这让人更加困惑。
编辑:其他信息,似乎将lruEntries添加为lruEntries.remove时出错(在completeEdit()上调用了entry.key。
答案 0 :(得分:3)
Volley在图像方面有2个缓存层:
ImageLoader
构造函数中由提供的内存缓存。RequestQueue
执行的每个请求共享。 除非请求明确请求,否则磁盘缓存会缓存每个响应。但是,缓存是根据响应的 HTTP缓存标头执行的。
当您请求图像时,这就是Volley所做的:
我敢打赌,从磁盘加载的图像有缓存标题。
IMO,您有3个选择: