跨不同的Android版本保存/加载ArrayList

时间:2011-03-04 08:13:40

标签: java android serialization arraylist

我在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:   static final long serialVersionUID   = -8334108180457627365L;但是预计org.apache.harmony.luni.internal.util.ZoneInfo:   static final long serialVersionUID   = 2415005675580187790L;

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

我也试过Parcelable但没有成功。

如何在没有此问题的情况下保存和加载ArrayList?

以下是我试过的ROM的SUID:
G1 1.6(CSDI V4 por Super @ tmel): - 1970599206206877388L
Droid 2.2(CyanogenMod 6.1.2): - 8334108180457627365L
机器人2.3(CyanogenMod 7 nightly 12):2415005675580187790L

2 个答案:

答案 0 :(得分:3)

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

  

Calendar.getTimeInMillis()

  

Timezone.getRawOffset()

由于某些原因,Dalvik在'ZoneInfo'类中更改了serializationId。

答案 1 :(得分:0)

我已经断定,实际上(5月/ 6月)回来了,唯一的办法是将数据保存在数据库中,无论如何这都是理想的方式。

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