-1

インターネットからたくさんの画像をダウンロードしてに保存し、hashmapに表示していListViewます。画像をキャッシュしたい。そのために、アクティビティHashmap内のファイルにオブジェクトを保存し、内のオブジェクトを取得しています。onDestroy()oncreate()

Map<String, Drawable> hashmap; //storing the urls of images and downloaded image `Drawables` into this map 

内部onCreate():

       File f = new File(Environment.getExternalStorageDirectory()+"/image_cache.ser");
        if(f.exists()){ 
            FileInputStream fin = new FileInputStream(f);
            ObjectInputStream ois = new ObjectInputStream(fin);
            hashmap = (HashMap<String, Drawable>)ois.readObject();
            ois.close();
            Here creating a custom adapter and showing the hashmap drawable images in a listview 
          }

onDestroy() の内部

@Override
protected void onDestroy() {
    super.onDestroy();
    File f = new File(Environment.getExternalStorageDirectory()+"/image_cache.ser");

    try {
        if(hashmap != null && hashmap.size() >= 1){

            FileOutputStream fout = new FileOutputStream(f);
            ObjectOutputStream oos = new ObjectOutputStream(fout);
            oos.writeObject(hashmap);
            oos.flush();
            oos.close();

        }
    } catch (Exception e) {
        e.printStackTrace();
        f.delete();
    }

}

問題 : この例外を取得:

java.io.NotSerializableException android.graphics.drawable.BitmapDrawable inside ondestoy().

hashmap objectがシリアル化されないのはなぜですか? 私が間違っているところ。画像をキャッシュするのが間違っている場合は、正しい方法で教えてください。

4

2 に答える 2

0

Drawableクラスがそうではないため、ハッシュマップを作成できませんSerializable

Drawable実装しないSerializable

于 2013-04-24T12:37:41.770 に答える