【问题标题】:Saving/loading an ArrayList across different Android versions跨不同 Android 版本保存/加载 ArrayList
【发布时间】:2011-07-08 15:41:31
【问题描述】:

我在跨 Android 版本保存/加载 ArrayList<HashMap<String, Object>> 时遇到问题。几天来我一直在 Google 和 SO 上寻找解决方案,但我尝试过的一切都没有奏效。

这是我得到的错误:

java.io.InvalidClassException: org.apache.harmony.luni.internal.util.ZoneInfo; 不兼容的类(SUID): org.apache.harmony.luni.internal.util.ZoneInfo: 静态最终长序列版本UID =-8334108180457627365L;但预期 org.apache.harmony.luni.internal.util.ZoneInfo: 静态最终长序列版本UID =2415005675580187790L;

我在包含 ObjectInputStream 和 ObjectOutputStream 的类中尝试了implement Serializablestatic final long serialVersionUID = 1L,但错误没有改变。进一步的测试表明,在遇到相同问题的两个不同应用上,该错误甚至不会发生变化,并且错误中的 SUID 完全取决于保存文件或尝试加载文件的 Android 版本。

我也尝试过 Parcelable,但没有成功。

如何保存和加载 ArrayList 而不出现此问题?

这是我尝试过的 ROM 的 SUID:
G1 1.6(CSDI V4 或 Super@tmel):-1970599206206877388L
Droid 2.2(CyanogenMod 6.1.2):-8334108180457627365L
Droid 2.3(CyanogenMod 7 nightly 12):2415005675580187790L

【问题讨论】:

    标签: java android serialization arraylist


    【解决方案1】:

    实际上不久前(5 月/6 月)我已经得出结论,解决此问题的唯一方法是将数据保存在数据库中,无论如何这是理想的方法。

    我发现一开始学习数据库有点令人生畏,但是一旦您了解了如何使用它们,它们就会变得很棒。我强烈推荐给任何想要存储数据的人,至少在大多数情况下。这是让我开始使用数据库的视频:http://youtube.com/watch?v=v61A90qlK9s

    【讨论】:

      【解决方案2】:

      您的地图中有java.util.Calendarjava.util.Timezone 作为值,不是吗?换成其他格式应该没问题,例如:

      Calendar.getTimeInMillis()

      Timezone.getRawOffset()

      由于某些原因,Dalvik 更改了“ZoneInfo”类的 serializationId。

      【讨论】:

      • 它可以工作,但是对于已经存在的具有这些数据类型的序列化数据来说仍然是一个问题。
      猜你喜欢
      • 2020-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多