2

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

你能帮我么。谢谢

4

3 回答 3

1

我遇到了同样的问题并制作了这个类来帮助序列化:

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);
}
}
于 2013-09-05T09:12:17.437 回答
0

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

  1. 实现 Serializable,(它的所有成员也都这样做),或者
  2. 从实现 Serializable 的基类继承(并且所有成员都遵循规则),或者
  3. 实现 Serializable 并且所有不可序列化的成员都被标记为 Volatile,或者
  4. 未如此标记的不可序列化成员具有用于反序列化的无参数默认构造函数。

你没有提供足够的细节让我更进一步,但我还是不能为你写?通常,您可以从不可序列化的类派生或包装它们并提供必要的功能。只要每个成员都满足我列出的条件,就不应该抛出异常。

于 2013-09-10T15:53:23.497 回答
-1

您需要确保该类实现了java.io.Serializable接口。还可以考虑使用 Bundles 并将数据保存在onSaveInstanceState. 有关数据存储的更多信息,请参阅此开发指南主题

于 2011-10-11T00:15:34.040 回答