问题标签 [parcelable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
14531 浏览

android - 为什么parcelable对象在接收活动时为空?

我正在关注 Android 开发人员指南中的 Parcelable 示例,目的是让我将更复杂的对象发送到不同的活动。现在,我的类是 String 成员的包装器。如果我将对象放入 Intent 并从 Intent 中读取它,它会按预期读取,但是,在接收方,它始终是空指针。

我的课:

我的意图 / 回读 / startActivity 设置:

我的收货活动:

我的日志:

我的堆栈回溯:

0 投票
2 回答
7295 浏览

android - 实现包含其他 Parcelable 的 Parcelable 的问题

我正在实现具有另一个 Parcelable insde 的 Parcelable 类。

在 OuterParcelable 类中:

接着:

和:

当我使用上面的代码重新创建对象时,我得到:

0 投票
1 回答
18543 浏览

android - 是否可以在 Android 上创建一个 Parcelable 的 HashMap?

我正在尝试将 HashMap 扩展为 Parcelable 并且我获得了要编译的语法,但是,在运行时它会引发异常并返回一个空指针,试图解组数据。

发送方必须强制转换为 (Parcelable) 以解决歧义,但是,接收方抱怨预期为 Parcelable 但找到了 HashMap。

有人成功了吗?我的语法错了吗?有更好的解决方案吗?

以下是代码:

  • HomeActivity.java - 发送者
  • ContentViewActivity.java - 接收者
  • ContentItemSimple.java - 顾名思义(包装一个字符串和整数)
  • ContentItemCollection.java - 这是 HashMap

HomeActivity.java

内容视图活动

ContentItemSimple.java

ContentItemContainer.java

0 投票
2 回答
1448 浏览

android - 将可序列化对象放入捆绑包时是否总是被序列化?

我们想知道当使用Bundle可序列化或可打包的对象时,编组实际上是在什么时候发生的?只要你把它放在包里?由于捆绑包主要用于在两个屏幕之间简单地传递数据(我们在这里甚至不讨论 IPC!),编组对象似乎没有多大意义,因为它一直保留在内存中,不?

我们是否正确假设编组(无论是 Java 序列化还是 Android 打包)仅在以下情况下发生

  1. 数据必须传递给另一个进程,例如在 RMI 期间,或
  2. 组件(活动或服务)被破坏并且必须将实例状态写入磁盘?

我见过 Android 框架工程师(我相信是 Dianne Hackborn)说应该使用Parcelable而不是Serializable因为前者要快得多。快多少?如果对象大部分时间都没有被编组(假设我们对此的假设是正确的),这甚至会产生影响吗?

0 投票
1 回答
247 浏览

android - 将对象发送到 Android 中的库类

我正在尝试在 android 中制作一个简单的自制游戏引擎/框架。我将“引擎”作为处理所有图形渲染、游戏活动等的库项目。本质上,库项目有一个 GameMain 类,它有一个背景图像、一个可绘制数组和一些函数(最重要的是一个 run() 函数)。使用这个库的项目用他们自己独特的 run() 函数扩展了这个类。这个想法是使用引擎的游戏从他们自己的活动开始,从库中启动 GameActivity,并将其独特的 GameMain 子对象传递到库中,由于多态性,库应该运行独特的 run() 方法。

然而,让它发挥作用一直是一场斗争。我最初试图使 GameMain 可序列化,但这似乎不起作用。我现在正试图将其设为 Parcelable,但在从库中调用时,它似乎不会运行子对象 run() 函数。我想知道,Parcelable 对象是否真的能够跨活动发送 Object 方法?我是以错误的方式解决这个问题,还是我只是有其他一些我没有发现的奇怪错误?

0 投票
4 回答
13903 浏览

android - 在 Android 中使用 Serializable 不好吗?

我一直在阅读很多帖子和文章,它们颂扬 Parcelable 优于 Serializable 的速度。我已经使用了一段时间来通过 Intents 在活动之间传递数据,并且在两者之间切换时还没有注意到任何速度差异。我必须传输的典型数据量是 5 到 15 个嵌套对象,每个对象包含 2 到 5 个字段。

由于我有大约 30 个必须可转移的类,因此实现 Parcelable 需要大量样板代码,这会增加维护时间。我目前的要求之一也是编译后的代码应该尽可能小;我希望我可以通过使用 Serializable 而不是 Parcelable 来节省一些空间。

我应该使用 Parcelable 还是没有理由在 Serializable 上使用它来处理如此少量的数据?还是我不应该使用 Serializable 的另一个原因?

0 投票
3 回答
5311 浏览

android - 如何将地址对象数组传递给其他 Acitvity

我正在尝试通过 Intent 对象将一组Address对象传递给另一个 Activity。

由于 Address 类实现Parcelable接口,我尝试执行以下操作。我从 Geocoder 对象中获得了 List Address 对象,我将其转换为 Address 对象数组。然后我把这个数组放入 Intent 并调用活动。

在另一个活动中,我尝试使用以下代码从 Intent 中检索 Address[]。但是最后一行的调用以 ClassCastException 结束Landroid.os.Parcelable

我究竟做错了什么?我如何必须检索地址 []。

0 投票
3 回答
7333 浏览

android - 如何在 Bundle 中发送自定义对象的 ArrayList

我有一个应用程序,它使用服务每 x 秒创建一个自定义对象 (MyObject) 的 ArrayList。然后我希望我的 Activity 获得这个 ArrayList。

我目前正计划让服务在每次完成数据查询时向 Activity 的处理程序发送一条消息。我希望发送给处理程序的消息包含 MyObjects 的 ArrayList。

在 Activity 中构建方法以从消息中获取此 ArrayList 时,我注意到我做不到。

如果我试过

然后我将它传递给预期的 ArrayList 的方法不会接受它。如果我尝试投射结果:

我收到错误:Cannot cast from ArrayList<Parcelable> to ArrayList<MyObject>

MyObject 实现 Parcelable 并且我已经成功地将一个 ArrayList 从我的服务发送到我的活动,方法是让我的活动调用服务上的一个方法来检索它。不过,我正试图避免让我的活动轮询我的服务以获取这些数据。

1)如何在消息中将包内的 ArrayList 发送给处理程序?

2) 我应该使用不同的模型来让我的服务更新我的活动中可能可见或不可见的数据吗?我总是希望我的活动中的数据是来自服务的最新数据。

0 投票
1 回答
1687 浏览

android - 使类 Parcelable 错误

我正在尝试使 Task parcelable 放入一个包中以从我的服务传递到活动,但我在使用我的自定义类型的 ArrayList 时遇到了一些麻烦。

任务:

资源:

它在任务内的 prc.writeTypedArray 函数上给了我一个错误:

如果 Resources 正在实施 Parcelable,那么我看不出问题出在哪里。

编辑:我相信我已经修复了这部分。我使用 .writeParcelableList() 代替。有人可以确认这应该有效吗?下面的问题仍然有效。

此外,当活动从意图中读取任务时,我需要进行一些计算来填充其他一些数据成员。在那里调用什么函数可以实现计算?是 readFromParcel(...) 还是以 Parcelable 作为参数的构造函数?

谢谢

0 投票
1 回答
511 浏览

android - 传递给核心的自定义 Parcelable 对象

我想在实现 Parcelable 的自定义类型的额外数据中发送带有意图的广播消息。

详细信息:我想在 HS 上创建快捷方式但是系统不接受我的自定义命令类型的对象,错误消息:android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.solvek.ussdfaster.entities.Command 当用户单击快捷方式时,此对象将被传递回我的应用程序。