【问题标题】:Download Image stream from android universal image loader从 android 通用图像加载器下载图像流
【发布时间】:2012-12-01 01:35:54
【问题描述】:

我在 monodroid 中将 android universal image loader 用于我的 android 应用程序。

有时我需要在 sdcard 中保存一些图像。在这种情况下,我需要以流的形式下载图像,然后将它们保存到 sdcard 中。

有没有办法通过这个库通过流下载图像。因为很多情况下图片都缓存在库中?

【问题讨论】:

  • 如果有人可以帮助我,请。 :-(

标签: android xamarin.android download universal-image-loader


【解决方案1】:

UIL 可以在 SD 卡上缓存图像(在 DisplayImageOptions 中启用缓存)。您可以定义自己的缓存文件夹(在 ImageLoaderConfiguration 中)。

如果您想使用 UIL 显示 SD 卡中的图像,您应该传递如下 URL: file:///mnt/sdcard/MyFolder/my_image.png

即使用file:// 前缀。

统一更新: 如果要将图像保存在 SD 卡上:

    String imageUrl = "...";
    File fileForImage = new File("your_path_to_save_image");

    InputStream sourceStream;
    File cachedImage = ImageLoader.getInstance().getDiscCache().get(imageUrl);
    if (cachedImage != null && cachedImage.exists()) { // if image was cached by UIL
        sourceStream = new FileInputStream(cachedImage);
    } else { // otherwise - download image
        ImageDownloader downloader = new BaseImageDownloader(context);
        sourceStream = downloader.getStream(imageUrl, null);
    }

    if (sourceStream != null) {
        try {
            OutputStream targetStream = new FileOutputStream(fileForImage);
            try {
                IoUtils.copyStream(sourceStream, targetStream, null);
            } finally {
                targetStream.close();
            }
        } finally {
            sourceStream.close();
        }
    }

【讨论】:

  • 我用 UIL 下载了一张图片并将其显示在图片库中。现在,如果用户单击保存图片,我希望我将此图片保存到 SD 中。我想知道如何从 UIL 获取这些文件的流以将它们保存到 SD 中。如果可以向 UIL 发送新请求并发送图像流。我可以将 url 请求再次发送到 UIL 并从其缓存中向我发送图像,我不会再次下载图像。
  • 实际上我不想显示图像。我想在画廊视图中显示后保存图像。
  • UIL 不提供此类功能,但您可以使用一些类。我更新了我的答案,以展示你如何做你想做的事。
  • 如何检测到图片正在下载?下载图片时,cachedImage.exist() 返回true,但保存的图片为null。
  • 仅当您使用监听器自己跟踪加载时:如果onLoadingComplete() 被触发,则图像被加载。但是onLoadingCancelled() 并不意味着该图像已加载。它仍然可以加载。
猜你喜欢
  • 1970-01-01
  • 2016-06-23
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
相关资源
最近更新 更多