如何停止下载单个图像
How to stop download of a single image
我正在创建一个应用程序,用户可以在其中从回收站视图中选择一个项目,这将开始下载一组图像。
我正在使用 universal image loader's
loadImage 方法为我获取图像,效果很好。
问题是,如果用户想取消下载这组图片(可能会非常耗费网络),我找不到办法让 ui 只停止部分图片。
我知道 ImageLoader.cancelDisplayTask()
方法,但由于我正在使用 loadImage
,所以我没有 ImageView
或 ImageAware
可作为参数发送给这个任务。
此外 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);
}
}
});
}
private ArrayList<ImageLoader> images = new ArrayList<ImageLoader>();
images.remove():
?不熟悉 ImageLoader class 但我希望这对您有所帮助
这些可能有帮助
android: Universal Image Loader get drawable from string array
How to change array list to string array for using Universal Image Loader?
https://github.com/nostra13/Android-Universal-Image-Loader/issues/109
我设法通过一个小的解决方法解决了这个问题。
我找不到取消特定 ImageLoader.loadImage()
的方法,所以我必须做的是通过传递 NonViewAware
class 来使用正常的 ImageLoader.displayImage()
需要作为参数的图像视图的位置。
然后我将此 NonViewAware
添加到 ArrayList<NonViewAware>
中以跟踪正在下载哪些图像。
最后,当我想取消显示任务时,我用列表中的一个存储项目调用了 ImageLoader.cancelDisplayTask(NonViewAware)
。
我正在创建一个应用程序,用户可以在其中从回收站视图中选择一个项目,这将开始下载一组图像。
我正在使用 universal image loader's
loadImage 方法为我获取图像,效果很好。
问题是,如果用户想取消下载这组图片(可能会非常耗费网络),我找不到办法让 ui 只停止部分图片。
我知道 ImageLoader.cancelDisplayTask()
方法,但由于我正在使用 loadImage
,所以我没有 ImageView
或 ImageAware
可作为参数发送给这个任务。
此外 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);
}
}
});
}
private ArrayList<ImageLoader> images = new ArrayList<ImageLoader>();
images.remove():
?不熟悉 ImageLoader class 但我希望这对您有所帮助
这些可能有帮助
android: Universal Image Loader get drawable from string array
How to change array list to string array for using Universal Image Loader?
https://github.com/nostra13/Android-Universal-Image-Loader/issues/109
我设法通过一个小的解决方法解决了这个问题。
我找不到取消特定 ImageLoader.loadImage()
的方法,所以我必须做的是通过传递 NonViewAware
class 来使用正常的 ImageLoader.displayImage()
需要作为参数的图像视图的位置。
然后我将此 NonViewAware
添加到 ArrayList<NonViewAware>
中以跟踪正在下载哪些图像。
最后,当我想取消显示任务时,我用列表中的一个存储项目调用了 ImageLoader.cancelDisplayTask(NonViewAware)
。