我有一个循环活动工作流程,如
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,我得到的只是一堆新问题。
答案 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();
}