在Android中通过意图传递复杂对象

5

我有一个对象,它具有以下类字段:

int,int,String,MyDatabaseType(自定义对象),List<MyDatabaseDetail>(自定义对象的数组列表)

我能通过intent/bundle传递这个对象吗?

我已经尝试过使用Serializable和Parcelable,但是没有成功。我需要将所有的自定义对象类型都实现Parcelable接口,而不仅仅是我想要传递的主要对象吗?

肯定有更好的方法吧?


你的自定义对象应该实现Parcelable或Serializable接口。没有其他方法可以绕过此要求。 - Gopal Gopi
我看到了这个链接:https://dev59.com/BWYr5IYBdhLWcg3wYpYg#13709806 - 我发现你可以使用 "readString()",但是对于像 List < MyDatabaseDetail >(或任何自定义类型)这样的东西,我该如何在构造函数中复制它? - b85411
2个回答

4
当你在意图(Intent)中传递数据时,数据必须是可Parcelable的。这是因为意图可能会传递到另一个应用程序,从而到达不同的虚拟机。由于对象可能跨越进程边界,所以需要一种机制来允许其保存/恢复。这类似于通过Web服务调用传递数据(在这种情况下,对象被“展开”为类似XML或JSON的东西)。
即使意图仍停留在您的应用程序内部,可parcelable性也可以使对象存活,即使Android选择杀死/重新启动您的应用程序,这可能发生在内存不足时。
可以使用序列化代替包裹,但是包裹更有效率。

0
如果您的类包含不可序列化的变量,您可以使其成为 Parcelable 。 如果您类内的所有变量都是基元类型或可序列化的,或者您可以使它们可序列化,那么实现该功能将非常容易。
您可以按照以下指南:http://developer.android.com/reference/java/io/Serializable.html 在大多数情况下,您只需要让您的类实现 Serializable 接口,并在您的类中添加以下行。
private static final long serialVersionUID = 0L;

(在上面的指南中阅读更多内容)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接