0

サーバーからに画像をダウンロードしています。ListViewこのタスクを実行するために、ImageDownloaderのサンプルコードを使用しています。これまでのところ、正常に動作しています。

saveしかし、私は画像を入れたいのですがListViewSD card画像が非同期にダウンロードされているため、画像を保存するタイミングがわかりません。ViewHolderパターンのため、判断するのは少し難しいです。

次回SDカードに保存したら、メモリからのみ読み取りたい。

ImageDownloadはビットマップをキャッシュに保存し、ダウンロードされるとそこからフェッチしますが、問題はその動作が予測できないことです。

サーバーからダウンロードすることもあれば、キャッシュからダウンロードすることもあります。

だから誰かがSDカードに画像を一度保存​​するのに適切な場所を見つけるのを手伝ってくれる?

4

1 に答える 1

1

ImageDownloaderクラスを変更して、次のように画像を保存します。

  • 次のようなダウンロードメソッドにパラメータを追加します。
 download(String url, ImageView imageView, Boolean saveData)
  • yout IDクラスでグローバル変数saveDataを作成します:

プライベートブールsaveData;

ダウンロードdmethodでパラメータとして指定された値をその中に格納します。

this.saveData = saveData;

  • BitmapDownloaderTaskのonPostExecuteメソッドは次のようになります。

@Override protected void onPostExecute(Bitmapビットマップ){if(isCancelled()){ビットマップ= 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 に答える