2015-05-19 91 views
0

我正在創建一個應用程序,用戶從回收站視圖中選擇一個項目,並開始下載一組圖像。如何停止下載單個圖像

我正在使用universal image loader'sloadImage方法爲我提取的圖像效果很好。

問題是,如果用戶想要取消下載這組圖像(可能非常耗費網絡資源),我找不到一種方法使ui僅停止一些圖像。

我知道的方法ImageLoader.cancelDisplayTask()的,但我使用loadImage我沒有ImageViewImageAware可用於發送作爲參數傳遞給這個任務。

ImageLoader.stop()ImageLoader.pause()停止所有當前的下載,我只想停止用戶選擇的。

我該如何做到這一點?

PS:在使用loadImage方法時,對於某些未來開發的建議將返回下載任務的指針。當我有時間爲這個精彩的圖書館做出貢獻時,也許我會自己去看看。

這裏是我下載圖片的代碼。

private void downloadFile(final URL downloadURL, 
          final URL destinationURL, 
          final boolean isThumbnail, 
          final MyDownloadListener listener) { 
    final NewsData thisClass = this; 
    final ImageLoader il = ImageLoader.getInstance(); 

    File imageFile = il.getDiskCache().get(destinationURL.toString()); 
    if (imageFile.exists()) { 
     fallDownloadCompleted(this, isThumbnail); 
     return; 
    } 
    il.stop(); 
    il.loadImage(
      downloadURL.toString(), 
      null, 
      Application.getAppDisplayOptions(), 
      new SimpleImageLoadingListener() { 
       @Override 
       public void onLoadingStarted(String imageUri, View view) { 
        if (listener != null) { 
         listener.onLoadingStarted(thisClass); 
        } 
       } 

       @Override 
       public void onLoadingFailed(String imageUri, View view, FailReason failReason) { 
        fallDownloadFail(thisClass, failReason, isThumbnail); 
       } 

       @Override 
       public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
        try { 
         il.getDiskCache().save(destinationURL.toString(), loadedImage); 
         if (isToday()) deleteImageFile(imageUri); 
        } catch (IOException e) { 
         deleteImageFile(imageUri); 
         fallDownloadFail(
           thisClass, 
           new FailReason(FailReason.FailType.IO_ERROR, new Throwable()), 
           isThumbnail); 
         return; 
        } 

        fallDownloadCompleted(thisClass, isThumbnail); 
       } 
      }, 
      new ImageLoadingProgressListener() { 
       @Override 
       public void onProgressUpdate(String imageUri, View view, int current, int total) { 
        float progress = 0; 
        if (total > 0 && numberOfTotalPages > 0) { 
         if (!isThumbnail) { 

          progress = numberOfAvailablePages/(float) numberOfTotalPages; 
          progress += (current/(float) total)/numberOfTotalPages; 

         } else { 
          progress = current/(float) total; 
         } 
        } 
        if (listener != null) { 
         listener.onProgressUpdate(thisClass, progress); 

        } 
       } 
      }); 
} 
+1

請提供您的代碼!最小化ui事件開始下載的處理程序代碼,使用的數據模型以及執行下載的異步任務/可運行/等。 –

回答

0

我設法解決這個問題有一個小的解決方法。

我找不到取消特定ImageLoader.loadImage()的方法,所以我必須做的是使用正常的ImageLoader.displayImage(),將NonViewAware類代替所需的圖像視圖作爲參數。

然後,我將這NonViewAware添加到ArrayList<NonViewAware>以跟蹤哪些圖像正在下載。

最後,當我想取消一個顯示任務時,我只是使用列表中的一個存儲項目調用ImageLoader.cancelDisplayTask(NonViewAware)