2015-05-19 90 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)