0

我正在将图像从服务器下载到 中ListView,现在要执行此任务,我正在使用ImageDownloader示例代码。到目前为止它工作正常。

但是我想在其中存储save图像,但是我很困惑何时存储图像,因为图像正在异步下载,并且由于 ViewHolder 模式对我来说很难判断。ListViewSD card

一旦我将它存储在 SD 卡中,下次我只想从内存中读取它。

ImageDownload 将位图存储在缓存中,并在下载后从那里获取它。但问题是它的行为是不可预测的。

有时它从服务器下载,有时从缓存中下载。

所以任何人都可以帮助我找到将图像存储在 SD 卡中的合适位置。

4

1 回答 1

1

修改您的 ImageDownloader 类以像这样保存图像:

  • 为下载方法添加一个参数,例如:
 download(String url, ImageView imageView, Boolean saveData)
  • 在你的 ID 类中创建一个全局变量 saveData :

私有布尔保存数据;

并将下载dmethod中作为参数给出的值存储在其中:

this.saveData = 保存数据;

  • BitmapDownloaderTask 的 onPostExecute 方法应如下所示:

@Override protected void onPostExecute(Bitmap bitmap) { if (isCancelled()) { bitmap = null; }

        addBitmapToCache(url, bitmap);

        if (saveData == true) {
            try {
                FileOutputStream out = new FileOutputStream(path);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        if (imageViewReference != null) {
            ImageView imageView = imageViewReference.get();
            BitmapDownloaderTask bitmapDownloaderTask = getBitmapDownloaderTask(imageView);
            // Change bitmap only if this process is still associated with it
            if (this == bitmapDownloaderTask) {
                imageView.setImageBitmap(bitmap);
            }
        }
    }

其中 path 是您要保存图像的路径。

下次要加载图像之前,您必须查看它是否已经下载并从路径加载,否则调用 ImageDownloader。

而已!请享用!

于 2012-08-20T13:21:21.917 回答