0

2 つの文字列値と 1 つのドローアブルを持つオブジェクトがあります (またはビットマップである可能性がありますが、問題ではありません)。写真はWEBから拾ってきます。私のプロジェクトでは、さらに使用するために、そのオブジェクトのいくつかを ArrayList に保存する必要があります。

その ArrayList は、ListView をカスタム アダプターで埋めるために使用されます。

今、これらのメソッドを使用して、ファイルから ArrayList を読み書きします。シリアル化を使用します。

public final class InternalStorage{

private InternalStorage() {}

public static void writeObject(Context context, String key, Object object) throws IOException {
    FileOutputStream fos = context.openFileOutput(key, Context.MODE_PRIVATE);
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(object);
    oos.close();
    fos.close();
}

public static Object readObject(Context context, String key) throws IOException,
        ClassNotFoundException {
    FileInputStream fis = context.openFileInput(key);
    ObjectInputStream ois = new ObjectInputStream(fis);
    Object object = ois.readObject();
    return object;
} }

問題は、Drawable または Bitmap オブジェクトがシリアル化できないことです。では、ArrayList のシリアル化されたすべてのオブジェクトと共にドローアブルを格納するにはどうすればよいでしょうか? たぶん、保存されているすべての画像ファイルをすべてのArrayListアイテムに何らかの方法で関連付ける必要がありますか? 結局のところ、それをどのように読むのですか?

回答ありがとうございます。下手な英語で申し訳ありません。

4

2 に答える 2

1

純粋なピクセルバッファが大きすぎるため、とにかくビットマップをシリアル化したくありません。Bitmap で圧縮メソッドを使用する

ByteArrayOutputStream baos = new ByteArrayOutputStream();  
immage.compress(Bitmap.CompressFormat.JPEG, 100, baos);
于 2014-07-06T14:10:32.530 に答える
1

これらのイメージの ByteArray を保存してから復元できます。

これらの機能を使用してください..

 public static byte[] convert(Bitmap bitmap) throws IOException {
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG,100,stream);
    byte[] array = stream.toByteArray();
    stream.close();
    return array;


}
public static Bitmap convert(byte[] array) {
    return BitmapFactory.decodeByteArray(array,0,array.length);
}
于 2014-07-06T14:10:39.307 に答える