通用图像加载器:我可以使用caching,但也刷新它?

我加载dynamic生成的图像,所以我总是希望他们是最新的。 但他们需要时间来加载,所以我也想显示一个caching的版本,而更新的一个不来。 通用图像加载器如何做到这一点?

更具体地说,当我调用“displayImage”时,我希望它执行以下操作:

  1. 如果存在caching的图像,则立即显示。
  2. 无论如何开始从给定的url下载。
  3. 加载完成后,在视图中显示replacecaching的图像。
  4. 更新caching。

Solutions Collecting From Web of "通用图像加载器:我可以使用caching,但也刷新它?"

所以最后我使用了一个ImageLoadingListener,如下所示:

onLoadingStarted:加载开始时检查caching。

onLoadingComplete:如果没有findcaching,则什么都不做。 请求将被发送到networking和caching将自然更新。 否则清除caching并再次调用displayImage(这次不需要监听器)。 caching的图像将正常显示在视图中。 而且,当第二次加载完成时,查看和caching将被更新。

ImageLoader.getInstance().displayImage(imageUri, view, new SimpleImageLoadingListener() { boolean cacheFound; @Override public void onLoadingStarted(String url, View view) { List<String> memCache = MemoryCacheUtils.findCacheKeysForImageUri(url, ImageLoader.getInstance().getMemoryCache()); cacheFound = !memCache.isEmpty(); if (!cacheFound) { File discCache = DiscCacheUtils.findInCache(url, ImageLoader.getInstance().getDiscCache()); if (discCache != null) { cacheFound = discCache.exists(); } } } @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { if (cacheFound) { MemoryCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getMemoryCache()); DiscCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getDiscCache()); ImageLoader.getInstance().displayImage(imageUri, (ImageView) view); } } }); } 

您可以使用ImageLoadingListener。 这个接口有4个方法来覆盖:onLoadingStarted,onLoadingFailed,onLoadingComplete,onLoadingCancelled。 在onLoadingStarted你可以使图像caching一个,然后完成你改变它。

所以这个电话看起来像这样:

 imgLoader.displayImage(url, myImageView,new ImageLoadingListener() { @Override public void onLoadingStarted(String arg0, View arg1) { //Display cached image if it exists } @Override public void onLoadingFailed(String arg0, View arg1, FailReason arg2) { // TODO Auto-generated method stub } @Override public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) { ((ImageView)arg1).setBitmapImage(arg2); } @Override public void onLoadingCancelled(String arg0, View arg1) { // TODO Auto-generated method stub } });