在再次包裹相同对象时获取解组未知类型代码

时间:2012-06-26 14:40:23

标签: android android-activity parcelable

我有一个循环活动工作流程,如

A - > B - > C - > A - > B - > C - > A - > B - > ç...

我将Parcelable从活动B传递给C.第一次工作。它第二次给我

  

包裹android.os.Parcel@405156d0:在偏移1108处解组未知类型代码7471204

在读取对象的行中。

对象没有改变。我不知道它是否完全相同,但内容至少完全相同。为什么它第一次起作用,第二次不起作用?

有时它也是第一次发生。

我尝试删除写入/读取中的所有内容(仅使用一个整数字段进行测试),但仍然可以使用相同的内容。

如果错误出现根本没有读取,则会执行getParcelable()行,但它永远不会执行createFromParcel或进一步执行构造函数。它只是给出了错误,什么也没做。因此,对于字段的分割,这不是错误。

我完全无能为力......

我尝试使用非常小的测试环境进行复制 - 有2个活动和一个非常小的物体,我可以按照我想要的次数传递这些物品并且它是正确的。

我无法在此处发布我的整个代码。

我只想知道哪种事情可能导致此错误。 writeToParcel和构造函数是正确的,数据以相同的顺序写入和读取,正确的tpyes,还有CREATOR变量也是正确的,我检查了所有内容100次。并且正如所说它很多次。有时对象中的数据完全相同(选中,每个字段包含相同的值),第一次有效,第二次显示此"解组未知类型"。

另一件非常有趣并且可能相关的事情,我也不明白,虽然我执行putExtra只有一次,但是可以写的是两次。我放了日志,它确定putExtra只执行一次。但writeToParcel执行了两次......不知道为什么。在简化的例子中,这不会发生。

欢迎任何提示。我做了所有的工作,使用Parcelable传递我的参数,他们很多,因为每个人都说"我非常鼓励使用Parcelable而不是#34;你说你的牙齿正在流血并得到" 34;使用Parcelable"。现在我使用Parcelable,我得到的只是一堆新问题。

1 个答案:

答案 0 :(得分:0)

我在使用Parcelable类时遇到此错误,&我在这个课程中添加了一个变量&忘了将这个变量添加到方法" writeToParcel"以及包含对象的构造函数

通过将此变量添加到以下方法中解决了这个问题。

@Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(id);
        dest.writeString(name);

}

public ItemDetails(Parcel source) {
        id = source.readString();
        name = source.readString();
}