【问题标题】:Getting Unmarshalling unknown type code when parcel same object again再次包裹同一对象时获取解组未知类型代码
【发布时间】:2012-06-26 14:40:23
【问题描述】:

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

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,但它被写入了两次。我放了日志,可以肯定putExtra 只执行一次。但是writeToParcel 被执行了两次......不知道为什么。在简化的示例中,这不会发生。

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

【问题讨论】:

  • 我认为您不太可能对这个问题有所了解。你基本上说你确定你已经完全正确地完成了所有事情,但它不起作用。您还没有发布任何代码(即使只是一点点)。你想让我们告诉你什么?
  • 该错误的含义,或可能导致该错误的原因。此外,如果有人有相关经验,他会在没有代码的情况下识别它们......但是,当我有时间时,我会将我的代码减少到必要的程度来展示并复制到这里,也许它有助于引起其他目标群体的兴趣: )
  • 该错误的含义是您的包裹已损坏。这意味着要么你的读者/作者不匹配,要么你以某种方式在包裹中添加了其他垃圾。但是根据您的其他 cmets(方法在不应该被调用的情况下被调用两次等),看起来您还有其他问题。也许您遇到了线程问题(多个线程以不同步的方式访问相同的数据)?没有更多信息就无法知道。
  • 所以,我想试一试这个问题,因为我只是在我的代码中清除了这个错误。你还记得你是否在活动的onCreate 方法中尝试getExtra 吗?
  • 嘿@Spencer,@Ixx。我有同样的问题,正如@Spencer 所说,是的,我在onCreate() 中这样做。任何解决方案,建议?

标签: android android-activity parcelable


【解决方案1】:

我在使用 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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多