【发布时间】:2011-12-04 21:54:08
【问题描述】:
我试图在活动调用 onDestroy() 时保存我的序列化对象,但是当我尝试使用 ObjectOutputStream 编写我的对象时,会抛出 java.io.NotSerializableExeption。
你能帮帮我吗?谢谢
【问题讨论】:
标签: android serialization objectoutputstream objectinputstream object-serialization
我试图在活动调用 onDestroy() 时保存我的序列化对象,但是当我尝试使用 ObjectOutputStream 编写我的对象时,会抛出 java.io.NotSerializableExeption。
你能帮帮我吗?谢谢
【问题讨论】:
标签: android serialization objectoutputstream objectinputstream object-serialization
您需要确保该类实现了java.io.Serializable 接口。还可以考虑改用 Bundles 并将您的数据保存在 onSaveInstanceState 中。有关数据存储的更多信息,请参阅this dev guide topic。
【讨论】:
writeObject 和 readObject 方法来执行此操作。
我遇到了同样的问题,做了这个类来帮助序列化:
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);
}
}
【讨论】:
如果你的对象映射包含一个不可序列化的对象,VM 会寻找一个无参数的构造函数,以便使用默认值创建一个对象并继续前进。当它不能时,它会抛出这个异常。最重要的是,对象图中引用的每个对象都必须:
你没有提供足够的细节让我更进一步,但我还是不能为你写?通常,您可以从不可序列化的类派生或包装它们并提供必要的功能。只要每个成员都满足我列出的条件,就不应该抛出异常。
【讨论】: