我有一个循环活动工作流程,例如
A -> B -> C -> A -> B -> C -> A -> B -> C...
我正在将一个 Parcelable 从 activit B 传递到 C。它第一次起作用。第二次它给了我
Parcel android.os.Parcel@405156d0:在偏移量 1108 处解组未知类型代码 7471204
在读取对象的行中。
对象没有改变。不知道是不是一模一样的实例,但至少内容是一模一样的。为什么第一次有效,第二次无效?
有时它也是第一次发生。
我尝试删除写入/读取中的所有内容(仅使用一个整数字段进行测试),但仍然得到相同的结果。
当错误出现时,根本不读取对象,执行带有的行,getParcelable()
但它永远不会执行createFromParcel
或进一步执行构造函数。它只是给出错误并且什么都不做。所以这不是字段打包的错误。
我完全一无所知...
我尝试使用一个非常小的测试环境进行复制 - 2 个活动和一个非常小的对象在那里我可以根据需要多次传递 parcelable 并且它是正确的。
我不能在这里发布我的整个代码。
我只想知道哪种情况会导致此错误。和writeToParcel
构造函数是正确的,数据以相同的顺序写入和读取,正确的 tpyes,还有 CREATOR 变量也是正确的,我检查了所有内容 100 次。正如所说,它可以工作很多次。有时对象中的数据完全相同(检查,每个字段都包含相同的值),第一次工作,第二次显示这种“Unmarshalling unknown type”。
另一件非常有趣且可能相关的事情,我也不明白,虽然我putExtra
只执行了一次,但 parcelable 却被写了两次。我放了日志,它肯定putExtra
只执行一次。但是writeToParcel
执行了两次......不知道为什么。在简化的示例中,这不会发生。
欢迎任何提示。我做了所有的工作来使用 Parcelable 将我的参数传递到任何地方,而且它们很多,因为每个人都说“我强烈鼓励使用 Parcelable”,你说你的牙齿在流血并得到“使用 Parcelable”。现在我正在使用 Parcelable,我得到的只是一堆新问题。