13

我想标题说明了一切。我试过:

imageLoader.getMemoryCache().get(key); 

以图像 uri 作为键,但它总是返回null

虽然我在配置中启用了缓存。

4

5 回答 5

32

使用MemoryCacheUtils.

MemoryCacheUtils.findCachedBitmapsForImageUri(imageUri, ImageLoader.getInstance().getMemoryCache());

内存缓存可以包含一个图像的多个位图(不同大小)。所以内存缓存使用特殊键,而不是图像 url。

于 2013-03-19T16:46:01.967 回答
2

它应该是 MemoryCacheUtil s,所以你应该使用

MemoryCacheUtils.findCachedBitmapsForImageUri(imageUri, ImageLoader.getInstance().getMemoryCache());
于 2014-06-07T17:49:51.553 回答
2

对于磁盘缓存使用下面的代码

public static boolean isDiskCache(String url) {
        File file = DiskCacheUtils.findInCache(url, ImageLoader.getInstance().getDiskCache());
        return file != null;
}
于 2017-03-05T08:01:48.843 回答
1

有时,在使用通用图像加载器库时,加载器需要一段时间来验证远程图像是否已经加载到缓存中。要直接加载缓存文件,可以使用以下方法检查远程文件的本地副本是否已经制作:

    File file = imageLoader.getDiscCache().get(url);  
 if (!file.exists()) {  
      DisplayImageOptions options = new DisplayImageOptions.Builder()  
      .cacheOnDisc()  
      .build();  
      imageLoader.displayImage(url, imageView, options);  
 }  
 else {  
      imageView.setImageURI(Uri.parse(file.getAbsolutePath()));  
 }  

在此处检查 在此处输入链接描述

于 2014-10-02T12:56:06.803 回答
1

我认为您可以在实用程序类中创建一个简单的方法,如下所示:

public static boolean isImageAvailableInCache(String imageUrl){
    MemoryCache memoryCache = ImageLoader.getInstance().getMemoryCache();
    if(memoryCache!=null) {
        for (String key : memoryCache.keys()) {
            if (key.startsWith(imageUrl)) {
                return true;
            }
        }
    }
    return false;
}

并像这样使用它:

   if(Utils.isImageAvailableInCache(imageUrl)){
//
      }
于 2015-10-27T11:15:31.220 回答