问题标签 [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 投票
4 回答
48612 浏览

android - 帮助传递 ArrayList 和 parcelable Activity

所以我昨天和昨晚的大部分时间都在谷歌搜索,似乎无法理解如何将数组列表传递给子活动。有大量传递原始数据类型的示例和片段,但我拥有的是地址类型的数组列表(下面的地址.java)。

我在 stackoverflow 和网络上找到了很多东西,但是除了一个 GeoPoint 示例之外,没有什么引起很多关注。再一次,在我看来,他们只是将 GeoPoint 对象扁平化为两个整数并将其传入。我不能这样做,因为我的地址类可能会扩展为包括整数、浮点数等。现在,为了简单起见,下面的测试应用程序只有两个字符串。我想如果我能让 parcelalbe 的东西与它一起工作,剩下的就可以了。

有人可以为非原始对象的 ArrayList 发布一个工作示例,或者在下面添加代码以使其工作吗?

更新:下面的代码现在在回复/编辑后工作。谢谢!

0 投票
1 回答
2420 浏览

android - Android:在不使用 marshall() 的情况下从 Parcelable 到 Serializable 的任何快捷方式?

我知道Parcelable(快)和Serializable(慢)之间的性能差异。但是,我需要持久存储某些应用程序信息,而不仅仅是在一个生命周期内,因此使用 Parcelable 对象的 onSaveInstanceState 和关联方法是不合适的。

于是我把注意力转向了Serializable。主要是我有AbstractList要存储的类型——这很好,因为它们实现了Serializable. 但是,我在其中存储的许多类型都是Parcelable但不是Serializable,例如RectF.

我认为“没问题”,因为我可以轻松地生成一个 Parcel,Parcelable.writeToParcel(parcel, flags)然后调用marshall()它来创建一个byte[]我可以序列化和反序列化的 Parcel。我想我会使用泛型;创建一个类,为我希望序列化SerializableParcelable<Parcelable> implements Serializable的所有类型提供一个适合的解决方案。Parcelable然后我会例如将每个 RectF 存储在这个包装器中ArrayList,并且你瞧,列表和它的Parcelable内容是可序列化的。

但是,API 文档声明marshall()不得用于持久存储:

公共最终字节 [] 马歇尔 ()

返回包裹的原始字节。

您在此处检索的数据不得放置在任何类型的持久存储中(在本地磁盘上、通过网络等)。为此,您应该使用标准序列化或另一种通用序列化机制。Parcel marshalled 表示针对本地 IPC 进行了高度优化,因此不会尝试保持与平台不同版本中创建的数据的兼容性。

所以现在我被困住了。我可以忽略此警告并遵循我上面概述的路线,或者通过扩展Parcelable我想要序列化的每个人并创建定制的序列化方法来规避这个问题,这似乎非常浪费时间和精力。

有谁知道Parcelable不使用序列化对象的“正确”快捷方式marshall()?或者我应该在不注意指定警告的情况下继续耕种?也许 SQLite 数据库是要走的路,但我不确定,希望得到您的建议。

非常感谢。

0 投票
4 回答
29145 浏览

android - 使用 Parcelable 接口时如何序列化空值

关于我的代码示例,如果一个 Locable 的变量为空,我该怎么办?例如,现在如果 l.getZoom() 返回 null,我得到 NullPointerException。

谢谢!

0 投票
1 回答
6069 浏览

java - 一些放在 Intent/bundle 中的 parcelables 对象可能会干扰自己并损害 Intent/Bundle 的读取?

一些放在 Intent/bundle 中的 parcelables 对象可能会干扰自己并损害 Intent/Bundle 的读取?

我在我认为有问题的地方提取代码。此代码有效:

但是如果我添加一个其他复杂的 parcelable 对象(使用实习生 parcelable ArrayList):

我为 arraylist1 获得了一个包含更多 10000000 个元素的毛球(或其他难以理解的问题)

虽然如果我用arraylist1删除行,它可以工作:

我试图制作一个扩展 ArrayList 并实现 Parcelable 的对象,但我还有一些其他问题(如 android.os.BadParcelableException: ClassNotFoundException when unmarshalling:)

如果这些对象相互干扰,那么我必须使用几个捆绑包将这些不同的对象放入同一个意图中?

0 投票
1 回答
1969 浏览

android - 在 Android Intent Extras 中使用 protobuffers 而不是 Parcelables?

使用协议缓冲区对象(序列化为字节数组)作为意图在 Android 活动之间传递而不是在经典 POJO 上实现 Parcelable 是一个好主意吗?它将如何影响性能?

谢谢马库斯

0 投票
2 回答
13921 浏览

android - Serializable Parcelable 问题:RuntimeException: Parcelable 在写入可序列化对象时遇到 IOException

伙计们,我有最简单的课程,我想成为 Parcelable。我正在按照以下方式进行操作:

很简单吧?是的,看起来。但是当我尝试将我的类对象作为包裹对象发送到另一个活动时,例如:

我收到以下异常:

无法真正理解这里的内容是不可序列化的吗?

0 投票
3 回答
1130 浏览

java - 如何将对象分解为 byte[]?

我如何破坏一个对象——更具体的 Parcelable;实际上它是一个捆绑包,但要点是相同的 --- 放入一个字节 []?我认为我这样做的方式是一个很好的解决方案,但显然我错了。

仅供参考,这是我以前的做法。

谢谢~Aedon

编辑 1::

像这样将 Bundle 传递给它的对象会导致 NotSerializableException。

0 投票
2 回答
4037 浏览

android - 实现需要上下文的 Parcelable 类

我希望我的数据类实现 Parcelable,以便它可以在活动之间共享,但是它还需要引用 Context,以便可以将字段保存到 SQLiteDatabase。

然而这是一个问题,因为 Parcelable.Creator 方法 createFromParcel 只有一个参数 Parcel。

实现 Parcelable 的类如何也引用 Context 以便保存到 SQLiteDatabase?

0 投票
1 回答
1269 浏览

android - 通过 Intent 传递对原始视频文件的引用并在另一个活动中使用它

在我当前的工作代码中,我从显示一些缩略图的屏幕传递图像的引用。选择缩略图时,存储图像ID,然后在新活动中使用。Now, when a thumbnail is selected, I want to store the image id and a reference to the associated video file.

选择缩略图后,它会打开一个新活动,其中显示带有播放按钮的完整图像。选择播放按钮后,我希望它调用一个新活动,该活动将根据缩略图屏幕上保存的参考播放视频。除了使用参考播放视频外,我一切正常。当我硬编码文件名时,视频将播放。

这是我的代码的一些片段。

从缩略图类:

从 full_image 类:

从我的视频课:

我想以某种方式使用 vidID 来替换 R.raw.standard。

如果我理解正确,我不能使用 vidID 因为它是一个 Int 并且 Uri.parse 需要一个字符串。我尝试使用 toString() 将 Int 转换为字符串,但我怀疑仅将实际数字转换为字符串并确实引入了实际文件名。我也试过 String.valueOf(vidID)。

我在想 Parcelabel 可能会在某处使用,但我没有关注如何使用它。我认为的另一种选择是将所有视频名称存储在一个数组中,并以某种方式使用它在 video.java 文件上动态创建文件名。

我会继续搜索,但非常感谢任何帮助。

0 投票
13 回答
104227 浏览

android - 实现 Parcelable 接口时如何读/写布尔值?

我正在尝试制作一个ArrayList Parcelable以便将自定义对象列表传递给活动。我开始编写一个myObjectList扩展ArrayList<myObject>和实现的类Parcelable

的一些属性MyObjectbooleanParcel没有任何方法read/writeBoolean

处理这个问题的最佳方法是什么?