I guess the title says it all. I tried:
imageLoader.getMemoryCache().get(key);
with the image uri as key, but it always return null
It should be MemoryCacheUtils, so you should use
MemoryCacheUtils.findCachedBitmapsForImageUri(imageUri, ImageLoader.getInstance().getMemoryCache());
For disk cache use below code
public static boolean isDiskCache(String url) {
File file = DiskCacheUtils.findInCache(url, ImageLoader.getInstance().getDiskCache());
return file != null;
}
Sometimes, when using the Universal Image Loader library, there comes a time where the loader takes a while to verify whether the remote image has been already loaded in your cache. To load the cache file directly, you can use the following method to check whether a local copy of the remote file has already been made:
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()));
}
check it hereenter link description here
Use MemoryCacheUtils
.
MemoryCacheUtils.findCachedBitmapsForImageUri(imageUri, ImageLoader.getInstance().getMemoryCache());
Memory cache can contain several bitmaps (diffenrent sizes) for one image. So memory cache use special keys, not image urls.
I think you can create a simple method in your utility class like this:
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;
}
and Use it like:
if(Utils.isImageAvailableInCache(imageUrl)){
//
}