Проблема сериализации Drawable

У меня есть единый объект с тремя полями: две строки и Drawable.

public class MyObject implements Serializable {

    private static final long serialVersionUID = 1L;
    public String name;
    public String lastName;
    public Drawable photo;

    public MyObject() {
    }

    public MyObject(String name, String lastName, Drawable photo) {

        this.name = name;
        this.lastName = lastName;
        this.photo = photo;
    }
}

Что я пытаюсь сделать, так это сохранить ArrayList этих объектов в файл, но я продолжаю получать NotSerializableException

02-02 23:06:10.825: WARN/System.err(13891): java.io.NotSerializableException: android.graphics.drawable.BitmapDrawable

Код, который я использую для хранения файла:

public static void saveArrayList(ArrayList<MyObject> arrayList, Context context) {

    final File file = new File(context.getCacheDir(), FILE_NAME);
    FileOutputStream outputStream = null;
    ObjectOutputStream objectOutputStream = null;

    try {
        outputStream = new FileOutputStream(file);
        objectOutputStream  = new ObjectOutputStream(outputStream);

        objectOutputStream.writeObject(arrayList);
    }

    catch(Exception e) {
        e.printStackTrace();
    }
    finally {
        try {
            if(objectOutputStream != null) {
                objectOutputStream.close();
            }
            if(outputStream != null) {
                outputStream.close();
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Все работает нормально, когда чертеж не инициализирован. Заранее благодарю за любую помощь.


person srgtuszy    schedule 02.02.2011    source источник


Ответы (2)


java.io.NotSerializableException: android.graphics.drawable.BitmapDrawable

Это сообщение кажется довольно ясным — конкретный экземпляр для рисования в поле photo представляет собой BitmapDrawable, который не предназначен для сериализации. Ваш класс нельзя сериализовать, не имея дело с несериализуемым полем.

Если вы можете гарантировать, что ваш класс всегда будет иметь BitmapDrawable или Bitmap , вы можете увидеть этот код в качестве примера того, как обрабатывать поле Bitmap:

android, как сохранить растровое изображение - код с ошибками

person Bert F    schedule 02.02.2011
comment
Спасибо за ответ! Это решение, которое я искал. - person srgtuszy; 03.02.2011

Вы не можете сериализовать это.

Проще говоря, если BitmapDrawable не является Serializable, вы не можете его сериализовать. Обычно такие вещи нельзя сериализовать, потому что они содержат ссылки на вещи, которые не являются чистыми данными. Как контекст или дескриптор поверхности рисования.

person rfeak    schedule 02.02.2011