Сохранение моего сериализованного класса, в котором не было сериализованных объектов, таких как Rect - PullRequest
2 голосов
/ 11 октября 2011

Я пытаюсь сохранить мой сериализованный объект, когда действие вызывает onDestroy (), но когда я пытаюсь написать свой объект, используя ObjectOutputStream, генерируется java.io.NotSerializableExeption.

Можете ли вы помочь мне. Спасибо

Ответы [ 3 ]

0 голосов
/ 05 сентября 2013

Я столкнулся с той же проблемой и сделал этот класс, чтобы помочь сериализации:

public class SerializableRect implements Serializable {

private static final long serialVersionUID = 1L;

private Rect mRect;

public SerializableRect(Rect rect) {
    mRect = rect;
}

public Rect getRect() {
    return mRect;
}

private void writeObject(java.io.ObjectOutputStream out) throws IOException {
    int left = mRect.left;
    int top = mRect.top;
    int right = mRect.right;
    int bottom = mRect.bottom;

    out.writeInt(left);
    out.writeInt(top);
    out.writeInt(right);
    out.writeInt(bottom);
}

private void readObject(java.io.ObjectInputStream in) throws IOException,
        ClassNotFoundException {
    int left = in.readInt();
    int top = in.readInt();
    int right = in.readInt();
    int bottom = in.readInt();

    mRect = new Rect(left, top, right, bottom);
}
}
0 голосов
/ 10 сентября 2013

Если ваша карта объектов содержит несериализуемый объект, виртуальная машина ищет конструктор без аргументов, чтобы создать объект со значениями по умолчанию и двигаться дальше.Выдает это исключение, когда не может.Суть в том, что каждый объект, на который ссылается ваш граф объектов, должен либо:

  1. Реализует Serializable (и все его члены тоже), либо
  2. Наследуется от базыкласс, который реализует Сериализуемый (и все члены следуют правилам), или
  3. Реализует Сериализуемый, и все несериализуемые члены помечены как Волатильные, или
  4. Не сериализуемые члены, не отмеченные так, имеют конструктор по умолчанию без аргументовдля использования в десериализации.

Вы не предоставили мне достаточно подробностей, чтобы пойти дальше, но я все равно не могу написать это для вас?В общем, вы можете извлечь из не сериализуемых классов или обернуть их и предоставить необходимую функциональность.Пока каждый участник отвечает условиям, которые я перечислил, не должно быть никаких исключений.

0 голосов
/ 11 октября 2011

Вы должны убедиться, что класс реализует интерфейс java.io.Serializable. Также рассмотрите возможность использования комплектов и сохранения ваших данных в onSaveInstanceState. Подробнее о хранении данных см. этот раздел руководства разработчика .

...