Проблема сериализации Drawable - PullRequest
1 голос
/ 03 февраля 2011

У меня есть отдельный объект, который имеет три поля: две строки и 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();
        }
    }
}

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

Ответы [ 2 ]

2 голосов
/ 03 февраля 2011

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

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

2 голосов
/ 03 февраля 2011
java.io.NotSerializableException: android.graphics.drawable.BitmapDrawable

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...