【问题标题】:Android Error sending ArrayList<ParseObject> in between Activities on Android. Parcel: unable to marshal value com.parse.ParseObject@b308c828 errorAndroid 在 Android 上的活动之间发送 ArrayList<ParseObject> 时出错。包裹:无法编组值 com.parse.ParseObject@b308c828 错误
【发布时间】:2014-08-12 12:40:20
【问题描述】:

我正在尝试使用以下代码将 ParseObjects 的 arrayList 从一个活动发送到另一个活动:

Intent intent = new Intent(MainActivity2.this, Activity2.class);
intent.putExtra("arrayList", list);
startActivity(intent);

其中 list 是从 ArrayList 表示的解析查询获得的 ParseObjects 的 arrayList。一些 ParseObjects 是 unParcebale,因为它们包含 ParseFile 和 Location 数据。

我不断收到错误:

java.lang.RuntimeException: Parcel: unable to marshal value com.parse.ParseObject@b308c828

如何摆脱这个错误并在第二个Activity中成功发送并获取ArrayList? 谢谢

【问题讨论】:

  • parseObject 成员之一不得为Parcelable
  • @nstCactus 确实如此。它包含一个 parseFILE。我该怎么办?
  • @IreAdewolu 我在下面的答案中发布了你应该做什么。就个人而言,我建议使用 JSON 或 GS​​ON。还有一个“hackish”解决方案,我故意在我的回答中没有提到:使用公共静态类将列表简单地存储在一个活动中并在另一个活动中检索它。可悲的是,这也是最简单的解决方案。

标签: android arraylist parse-platform parcelable parcel


【解决方案1】:

ParseObject 不是 Serializable 也不是 Parcelable。您必须使用自定义包装器来发送您想要的数据并在新 Activity 上重建 ParseObject。

【讨论】:

    【解决方案2】:

    您无法将不属于types shown here 的内容传递给其他活动(或片段)。最重要的是,您要传递的对象必须是 Serializable 或 Parcelable。尝试Jamie Chapman's ParseProxyObject,它将 ParseObject 包装在 Serializable 中,发现 here。但请先查看documentation of Serializable

    明智地实现 Serializable

    有关序列化 API 的全面介绍,请参阅 Effective Java 的序列化章节。这本书解释了如何在不损害应用程序可维护性的情况下使用此接口。

    推荐的替代品

    JSON 简洁、易读且高效。 Android 包括一个流式 API 和一个树形 API 来读取和写入 JSON。使用 GSON 之类的绑定库直接读写 Java 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-18
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多