在listview中加载后将图像存储到SD卡中

时间:2012-08-20 13:13:56

标签: android android-listview android-imageview

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

但是我希望在saveListView SD card的图像,但我很困惑何时存储图像,因为图像是异步下载的,而且由于ViewHolder模式,它很难实现我来判断。

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

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

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

所以任何人都可以帮我找一下在SD卡中存储图像的正确位置。

1 个答案:

答案 0 :(得分:1)

修改ImageDownloader类以保存图像:

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

private Boolean saveData;

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

  

this.saveData = saveData;

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

@覆盖           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。

就是这样!享受!