2011-07-14 22 views
5

リストビューを高速化しようとしていますが、リストをスクロールするときにインターネットではなく電話からイメージをキャッシュして読み込みます。しかし、私はDrawableオブジェクトをシリアライズしようとすると例外が発生します。アンドロイドで描画可能オブジェクトをシリアライズ

java.io.NotSerializableException:シリアライズするための最良の方法は何android.graphics.drawable.BitmapDrawable

これは私の関数である:内のコード結果の

private void cacheImage(Drawable dr, Article a){ 
    FileOutputStream fos; 
    try { 
     fos = openFileOutput(a.getArticleId().toString(), Context.MODE_PRIVATE); 
     ObjectOutputStream oos = new ObjectOutputStream(fos); 
     oos.writeObject(dr); 
     oos.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    }catch(IOException e){ 
     e.printStackTrace(); 
    } 
} 

この気の利いたビットこれらの画像?あなたのDrawables場合

答えて

6

を使用してそれらを格納することができ、すべてのBitmapsです。他のすべてのドロアブルはあなたのAPKの可能性が最も高いです。あなたはBitmapクラスを使用できるファイルにビットマップを書きたい場合は

private void cacheImage(BitmapDrawable dr, Article a){ 
    FileOutputStream fos; 
    try { 
     fos = openFileOutput(a.getArticleId().toString(), Context.MODE_PRIVATE); 
     dr.getBitmap().compress(Bitmap.CompressFormat.PNG, fos); 
     fos.flush(); 
     fos.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    }catch(IOException e){ 
     e.printStackTrace(); 
    } 
} 
+0

これはうまくいくようですが、保存した画像をアプリケーションに戻すにはどうしたらいいですか? – karl

0

はあなたが唯一のインターネットからのごすなわちフェッチすることをビットマップ(ドローアブル)をキャッシュする必要があるのBitmap.compress()

-2

彼らは実際にあなたが望むものをやっているhttp://code.google.com/p/shelves/グーグルShlevesプロジェクトを参照してください。 WeakReferenceとSoftReference to Imagesを維持しているコードを見てください。

+0

svn checkout http://shelves.googlecode.com/svn/trunk/ –

関連する問題