2014-11-18 15 views
8

Tôi đang cố tải hình ảnh vào bitmap bằng UIL. Tôi cần tải nhiều hình ảnh và tôi nhận thấy rằng trong một số trường hợp, url hình ảnh có thể giống nhau. Và trong những trường hợp như vậy chỉ có hình ảnh đầu tiên được tải. Làm cách nào để tránh yêu cầu hủy trong UIL?Yêu cầu Trình tải hình ảnh phổ dụng Android có cùng URL đang bị hủy

Mã được chạy 3 lần trong vòng lặp:

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"); 
    } 
}); 

Logs là:

onLoadingStarted 
onLoadingStarted 
onLoadingStarted 
onLoadingComplete 
onLoadingCancelled 
onLoadingCancelled 
+0

thay đổi từ loadImage to displayImage và xem nó có hoạt động hay không. Nếu bạn đang tải tới cùng một lần xem, tải sẽ bị hủy nếu một tác vụ khác đang xử lý mà số lần xem là – mobilepotato7

Trả lời

12

UIL hủy trước displayImage(...) nhiệm vụ cho ImageView cùng.

UIL hủy trước nhiệm vụ loadImage(...) cho cùng một URL.

Thực tế cho cả hai trường hợp UIL hoạt động với ImageAware s bên trong và so sánh ImageAware.getId() để quyết định hủy tác vụ hay không.

Trong trường hợp của bạn để ngăn chặn việc hủy bạn có thể làm như thế này:

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

nhưng cách: 'loadImage (...)'? – user3871754

+1

Nội bộ 'loadImage (...)' là 'displayImage (...)' sử dụng 'NonViewAware'. – NOSTRA

+1

Cảm ơn, điều này đã cứu mạng tôi. Mặc dù nó sẽ là tốt đẹp để có các tùy chọn trong ImageLoaderConfig để ngăn chặn hủy bỏ. Vì tôi đã gặp phải vấn đề này nhiều lần, và tôi cũng chắc chắn những người khác. – hadez30

0

Hi Tôi cũng có cùng một vấn đề với một số giống uri trong gọi đồng thời. Tôi đã phát triển lớp Tùy chỉnh sử dụng ImageLoader và giải quyết sự cố

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); 
    } 
} 
Các vấn đề liên quan