【问题标题】:Serializing and deserializing in android applicationandroid应用程序中的序列化和反序列化
【发布时间】: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


【解决方案1】:

当面临(反)序列化或(非)编组的问题时,我转向JAXB 来(反)序列化 json 或 xml。我试过Jackson,但没有得到我想要的结果,尤其是我的xml。 Jackson 喜欢为 XML 设置名称空间(默认为“”),而我不需要我的。除此之外,它很棒,没有依赖关系,它可以处理格式良好的 XML 和 JSON,这与 gsonJSON-java 不同。

阅读有关使用上述任何一种方法的信息时,Blaise DoughanStaxMan 的任何内容都不会出错。您可以在 right here 中找到有关 JAXB 的一般教程。对于使用 MOXy 作为您的 JAXB 提供程序,this 显示了所有必要的代码和指向您需要知道的任何其他内容的链接,以(反)序列化/(取消)编组您的对象。

【讨论】:

  • 明天我会调查一下,看看是否有帮助。
猜你喜欢
  • 2016-04-03
  • 1970-01-01
  • 2013-11-11
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 2012-03-17
相关资源
最近更新 更多