从Android中的对象实现Serializable和Parcelable接口 - 冲突

时间:2015-06-14 00:00:53

标签: android save parcelable serializable

我有一个对象,我必须保存到文件以供重用。此对象的类已实现Parcelable以用于意图。我将对象保存到文件的知识说实现Serializable,但是当我这样做时,我在一个意图的putExtra方法中包含该对象的类中出现错误,因为{{1} }和Serializable有这种方法。

有没有办法避免这种情况,或者只是一种可以保存对象状态并轻松重新加载的方法?

我看过一些文章,我觉得我不知道如何保存我的对象。 提前致谢

3 个答案:

答案 0 :(得分:2)

我相信ParcelableSerializable都会以不同的方式和不同的表现达到同一目标。鉴于此,如果对象层次结构中的某个类已实现Parcelable接口,则可以覆盖其writeToParcel方法,为其调用超级(因此超类的成员将写入包裹)如果它们是以那种方式实现的话)然后,你应该将你的属性写入包裹,始终记住你用来保存它们的顺序是你将用它来检索它们的顺序(FILO数据结构)

修改

只需将对象投射到抱怨的位置,然后按照此处的说明告诉您要使用的类的冲突:https://stackoverflow.com/a/13880819/2068693

答案 1 :(得分:1)

我不知道您可以同时实现SerializableParcelable,但是要将类从Serializable转换为Parcelable,可以使用以下插件: Android可打包代码生成器。

首先删除可序列化的工具,然后使用 ALT +插入,然后单击Parcelable,即可生成您的类。

答案 2 :(得分:0)

您有Serializable以外的选项,但这可能符合其他要求,例如避免库依赖性。您可以使用JSON或XML将对象写入文件,这具有可读性的优点。您可能还需要考虑版本控制 - 当您拥有需要由包含新字段的类读取的文件时会发生什么。持久性会带来一些你可能没有来回传递Bundles / Intents的问题。

如果您选择Serializable,我建议您构建对象,以便可以将其写入Bundle并从中读取。使用static MyObject.make(Bundle)方法和实例Bundle save()方法将所有常量和读/写保存在一个位置。