具有相同url的Android通用图片加载器请求正被取消

我正在尝试使用UIL将图像加载到位图。 我需要加载多个图像,我注意到在某些情况下,图像URL可以是相同的。 在这种情况下,只有第一个图像被加载。 如何避免UIL中的请求取消?

代码在循环中运行3次:

ImageSize targetSize = new ImageSize(70, 70); ImageLoader.getInstance().loadImage("http://sofzh.miximages.com/android/Mario-icon.png", targetSize, new ImageLoadingListener() { @Override public void onLoadingStarted(String imageUri, View view) { Log.e("tag", "onLoadingStarted"); } @Override public void onLoadingFailed(String imageUri, View view, FailReason failReason) { Log.e("tag", "onLoadingFailed"); } @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { Log.e("tag", "onLoadingComplete"); } @Override public void onLoadingCancelled(String imageUri, View view) { Log.e("tag", "onLoadingCancelled"); } }); 

日志是:

 onLoadingStarted onLoadingStarted onLoadingStarted onLoadingComplete onLoadingCancelled onLoadingCancelled 

Solutions Collecting From Web of "具有相同url的Android通用图片加载器请求正被取消"

UIL取消同一ImageView的前一个displayImage(...)任务。

UIL取消以前的loadImage(...)任务为同一个URL。

实际上,对于这两种情况,UIL都在内部运行ImageAware ,并比较ImageAware.getId()来决定是否取消任务。

在你的情况,以防止任务取消你可以这样做:

 ImageSize targetSize = new ImageSize(70, 70); ImageAware imageAware = new NonViewAware(targetSize, ViewScaleType.CROP); ImageLoader.getInstance().displayImage("http://icons...", imageAware, ...); 

您好,我也有同样的问题在同一时间调用同一个uri。 我已经开发了使用ImageLoader并解决问题的Custom类

 public static MyMusicImageLoader myMusicImageLoader; public ImageLoader imageLoader; public Map<String,MImageLoader> mImageLoaderMap = new HashMap<String, MImageLoader>(); public static MyMusicImageLoader getInstance(){ if(myMusicImageLoader==null) myMusicImageLoader = new MyMusicImageLoader(); return myMusicImageLoader; } public MyMusicImageLoader(){ imageLoader = ImageLoader.getInstance(); } public void loadImage(final String url,ImageLoadingListener imageLoadingListener){ MImageLoader mImageLoader = mImageLoaderMap.get(url); if(mImageLoader==null){ mImageLoader = new MImageLoader(url); mImageLoader.addImageLoadingListener(imageLoadingListener); mImageLoaderMap.put(url,mImageLoader); imageLoader.loadImage(url, new SimpleImageLoadingListener(){ @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { setAllMImageLoader(url,loadedImage); } }); }else{ mImageLoader.addImageLoadingListener(imageLoadingListener); } } public void setAllMImageLoader(String url, Bitmap bitmap){ MImageLoader mImageLoader = mImageLoaderMap.remove(url); ArrayList<ImageLoadingListener> imageLoadingListeners = mImageLoader.imageLoadingListeners; for(int i=0; i<imageLoadingListeners.size(); i++){ ImageLoadingListener imageLoadingListener = imageLoadingListeners.get(i); imageLoadingListener.onLoadingComplete("",null,bitmap); } imageLoadingListeners.clear(); } class MImageLoader{ String imageUrl; ArrayList<ImageLoadingListener> imageLoadingListeners = new ArrayList<ImageLoadingListener>(); MImageLoader(String imageUrl){ this.imageUrl = imageUrl; } void addImageLoadingListener(ImageLoadingListener imageLoadingListener){ imageLoadingListeners.add(imageLoadingListener); } }