android - 再次打包相同对象时获取解码未知类型代码

标签 android android-activity parcelable

我有一个像这样的循环 Activity 工作流

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

我正在将一个 Parcelable 从 Activit B 传递到 C。第一次它起作用了。第二次它给了我

Parcel android.os.Parcel@405156d0: Unmarshalling unknown type code 7471204 at offset 1108

在读取对象的行中。

对象没有改变。不知道是不是完全一样的实例,但至少内容是完全一样的。为什么第一次可以,第二次就不行?

有时它也是第一次发生。

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

当错误出现时,对象根本没有被读取,带有getParcelable() 的行被执行但它从不执行createFromParcel或进一步的构造函数。它只是给出错误并且什么都不做。所以这不是字段分割的错误。

我完全没有头绪......

我尝试在一个非常小的测试环境中进行复制 - 2 个 Activity 和一个非常小的对象,我可以根据需要多次传递 parcelable,这是正确的。

我不能在这里发布我的全部代码。

我只想知道是什么原因导致了这个错误。 writeToParcel 和构造函数是正确的,数据以相同的顺序写入和读取,正确的类型,还有 CREATOR 变量也是正确的,我检查了所有内容 100 次。正如所说,它工作了很多次。有时对象中的数据完全相同(已检查,每个字段包含相同的值),第一次有效,第二次显示此“Unmarshalling unknown type”。

另一件非常有趣且可能相关但我也不明白的事情是,尽管我只执行了一次 putExtra ,但 parcelable 却被写入了两次。我放了日志,它肯定 putExtra 只执行了一次。但是 writeToParcel 被执行了两次……不知道为什么。在简化示例中,这不会发生。

欢迎任何提示。我做了所有工作以使用 Parcelable 在任何地方传递我的参数,而且它们很多,因为每个人都说“我强烈建议改用 Parcelable”,你说你的 dentry 在流血并得到“使用 Parcelable”。现在我正在使用 Parcelable,我得到的只是一堆新问题。

最佳答案

我在使用 Parcelable 类时遇到此错误,并且我在此类中添加了一个变量,但忘记将此变量添加到方法“writeToParcel”和带有 Parcel 对象的构造函数中

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

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

}

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

关于android - 再次打包相同对象时获取解码未知类型代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11209825/

相关文章:

android - 如何通过滑动打开另一个 Activity

Android:如何使用类<?扩展 Activity> 作为 Parcelable 中的变量类型

android - 恢复时解码未知类型代码异常

java - Admob 插页式广告显示在游戏中间

Android In-App Billing 失败,提示 "You already have a pending order for this item."

Android Activity 生命终结

Android Activity 转换顺序

android - onSaveInstanceState 回调如何保存一个 SpannableString

android - 如何在框架布局的中心屏幕上设置 ProgressBar?

android - PhoneGap Android后台服务的实现方法