【发布时间】:2013-09-19 09:28:58
【问题描述】:
我正在为一位同事编写一个 Android 应用程序,用于跟踪注册足球联赛的孩子。我目前无法保存/序列化我的名册,然后再对其进行反序列化。我正在序列化的对象是一个 Player 对象数组。自定义播放器类实现了可序列化,因此它们的数组应该可以序列化(据我所知)。
我的序列化/保存方法:
String ser = SerializeObject.objectToString(currentRoster.getRosterArray());
if (ser != null && !ser.equalsIgnoreCase("")) {
SerializeObject.WriteSettings(this, ser, "playerRoster"); //.dat extension
} else {
System.out.println("Object not saved");
SerializeObject.WriteSettings(this, "", "playerRoster");
}
我的反序列化方法:
String ser = SerializeObject.ReadSettings(this, "playerRoster");
if (ser != null && !ser.equalsIgnoreCase("")) {
Object obj = SerializeObject.stringToObject(ser);
// Then cast it to your object and
if (obj instanceof Player[]) {
// Do something
loadedRoster = (Player[]) obj;
System.out.println(loadedRoster[0]);
}
}
我在我的应用程序中得到的结果是反序列化时数组中每个玩家的行话。 我的问题是我是否正确保存和加载数据,或者我是否忘记了什么。 (我省略了一些填充代码和异常处理以使其更清洁) 感谢您的帮助!
【问题讨论】:
-
您确定在将文件名提供为“playerRoster”时读取了序列化数据吗? ...尝试添加文件扩展名...例如“playerRoster.dat”...我从未尝试过 SerializeObject,我总是手动序列化,所以我自己不知道这种技术
-
刚刚尝试过,我得到了相同的结果。这是为每个球员显示的内容:[Lcom.example.soccersignup.Player;@420dc7a8
-
现在我很困惑,如果这个结果对于所有玩家都是相同的(包括最后的 hashCode),那么你的数组包含具有相同 hashCode 的相同玩家对象的重复值,并且这个意味着您的问题不在于序列化或反序列化您的对象!有更多代码吗,恐怕我现在得走了,但也许更多代码会对任何试图提供帮助的人有所帮助(或者我错了)
-
我已经测试了所有其他代码,用于生成玩家数组并对其进行操作。序列化时它不会抛出异常,反序列化时它会变得很奇怪。明天醒来时我会再看一遍。感谢您的尝试。
标签: java android serialization save deserialization