我正在尝试使用UIL将图像加载到位图。我需要加载多个图像,我注意到在某些情况下图像网址可能是相同的。在这种情况下,只加载第一张图像。如何避免在UIL中取消请求?
代码在循环中运行3次:
ImageSize targetSize = new ImageSize(70, 70);
ImageLoader.getInstance().loadImage("http://icons.iconarchive.com/icons/yellowicon/game-stars/256/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
答案 0 :(得分:14)
UIL取消了同一ImageView的上一个displayImage(...)
任务。
UIL取消同一网址的上一个loadImage(...)
任务。
实际上,对于这两种情况,UIL都在ImageAware
内部运行,并比较ImageAware.getId()
以决定是否取消任务。
在您的情况下,为了防止任务取消,您可以这样做:
ImageSize targetSize = new ImageSize(70, 70);
ImageAware imageAware = new NonViewAware(targetSize, ViewScaleType.CROP);
ImageLoader.getInstance().displayImage("http://icons...", imageAware, ...);
答案 1 :(得分:0)
嗨我在同一时间打电话时也遇到了同样的问题。我开发了使用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);
}
}