保存我没有序列化像Rect这样的对象的序列化类

时间:2011-10-10 23:34:42

标签: android serialization objectoutputstream objectinputstream object-serialization

我正在尝试在活动调用onDestroy()时保存我的Serialized对象,但是当我尝试使用ObjectOutputStream编写我的对象时,会抛出java.io.NotSerializableExeption。

你能帮我吗?感谢

3 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,并让这个类帮助序列化:

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);
}
}

答案 1 :(得分:0)

如果您的对象映射包含一个不可序列化的对象,则VM会查找无参数构造函数,以便使用默认值创建一个对象并继续。它不能抛出这个异常。底线是对象图中引用的每个对象都必须:

  1. 实现Serializable,(并且所有成员也都这样做)或
  2. 从实现Serializable的基类继承(并且所有成员都遵循规则)或
  3. 实现Serializable,所有不可序列化的成员都标记为Volatile或
  4. 未标记的不可序列化成员具有无参数默认构造函数,可用于反序列化。
  5. 你没有提供足够的细节让我更进一步,但我还是不能为你写它?通常,您可以从不可序列化的类派生或包装它们并提供必要的功能。只要每个成员符合我列出的条件,就不应该抛出异常。

答案 2 :(得分:-1)

您需要确保该类实现java.io.Serializable接口。另请考虑使用Bundles,并将数据保存在onSaveInstanceState中。有关数据存储的更多信息,请参阅this dev guide topic