问题标签 [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.
android - 帮助传递 ArrayList 和 parcelable Activity
所以我昨天和昨晚的大部分时间都在谷歌搜索,似乎无法理解如何将数组列表传递给子活动。有大量传递原始数据类型的示例和片段,但我拥有的是地址类型的数组列表(下面的地址.java)。
我在 stackoverflow 和网络上找到了很多东西,但是除了一个 GeoPoint 示例之外,没有什么引起很多关注。再一次,在我看来,他们只是将 GeoPoint 对象扁平化为两个整数并将其传入。我不能这样做,因为我的地址类可能会扩展为包括整数、浮点数等。现在,为了简单起见,下面的测试应用程序只有两个字符串。我想如果我能让 parcelalbe 的东西与它一起工作,剩下的就可以了。
有人可以为非原始对象的 ArrayList 发布一个工作示例,或者在下面添加代码以使其工作吗?
更新:下面的代码现在在回复/编辑后工作。谢谢!
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 数据库是要走的路,但我不确定,希望得到您的建议。
非常感谢。
android - 使用 Parcelable 接口时如何序列化空值
关于我的代码示例,如果一个 Locable 的变量为空,我该怎么办?例如,现在如果 l.getZoom() 返回 null,我得到 NullPointerException。
谢谢!
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:)
如果这些对象相互干扰,那么我必须使用几个捆绑包将这些不同的对象放入同一个意图中?
android - 在 Android Intent Extras 中使用 protobuffers 而不是 Parcelables?
使用协议缓冲区对象(序列化为字节数组)作为意图在 Android 活动之间传递而不是在经典 POJO 上实现 Parcelable 是一个好主意吗?它将如何影响性能?
谢谢马库斯
android - Serializable Parcelable 问题:RuntimeException: Parcelable 在写入可序列化对象时遇到 IOException
伙计们,我有最简单的课程,我想成为 Parcelable。我正在按照以下方式进行操作:
很简单吧?是的,看起来。但是当我尝试将我的类对象作为包裹对象发送到另一个活动时,例如:
我收到以下异常:
无法真正理解这里的内容是不可序列化的吗?
java - 如何将对象分解为 byte[]?
我如何破坏一个对象——更具体的 Parcelable;实际上它是一个捆绑包,但要点是相同的 --- 放入一个字节 []?我认为我这样做的方式是一个很好的解决方案,但显然我错了。
仅供参考,这是我以前的做法。
谢谢~Aedon
编辑 1::
像这样将 Bundle 传递给它的对象会导致 NotSerializableException。
android - 实现需要上下文的 Parcelable 类
我希望我的数据类实现 Parcelable,以便它可以在活动之间共享,但是它还需要引用 Context,以便可以将字段保存到 SQLiteDatabase。
然而这是一个问题,因为 Parcelable.Creator 方法 createFromParcel 只有一个参数 Parcel。
实现 Parcelable 的类如何也引用 Context 以便保存到 SQLiteDatabase?
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 文件上动态创建文件名。
我会继续搜索,但非常感谢任何帮助。
android - 实现 Parcelable 接口时如何读/写布尔值?
我正在尝试制作一个ArrayList
Parcelable
以便将自定义对象列表传递给活动。我开始编写一个myObjectList
扩展ArrayList<myObject>
和实现的类Parcelable
。
的一些属性MyObject
是boolean
但Parcel
没有任何方法read/writeBoolean
。
处理这个问题的最佳方法是什么?