我有一个对象,我必须保存到文件以供重用。此对象的类已实现Parcelable
以用于意图。我将对象保存到文件的知识说实现Serializable
,但是当我这样做时,我在一个意图的putExtra
方法中包含该对象的类中出现错误,因为{{1} }和Serializable
有这种方法。
有没有办法避免这种情况,或者只是一种可以保存对象状态并轻松重新加载的方法?
我看过一些文章,我觉得我不知道如何保存我的对象。 提前致谢
答案 0 :(得分:2)
我相信Parcelable
和Serializable
都会以不同的方式和不同的表现达到同一目标。鉴于此,如果对象层次结构中的某个类已实现Parcelable
接口,则可以覆盖其writeToParcel
方法,为其调用超级(因此超类的成员将写入包裹)如果它们是以那种方式实现的话)然后,你应该将你的属性写入包裹,始终记住你用来保存它们的顺序是你将用它来检索它们的顺序(FILO数据结构)
只需将对象投射到抱怨的位置,然后按照此处的说明告诉您要使用的类的冲突:https://stackoverflow.com/a/13880819/2068693
答案 1 :(得分:1)
我不知道您可以同时实现Serializable
和Parcelable
,但是要将类从Serializable
转换为Parcelable
,可以使用以下插件:
Android可打包代码生成器。
首先删除可序列化的工具,然后使用 ALT +插入,然后单击Parcelable
,即可生成您的类。
答案 2 :(得分:0)
您有Serializable
以外的选项,但这可能符合其他要求,例如避免库依赖性。您可以使用JSON或XML将对象写入文件,这具有可读性的优点。您可能还需要考虑版本控制 - 当您拥有需要由包含新字段的类读取的文件时会发生什么。持久性会带来一些你可能没有来回传递Bundles / Intents的问题。
如果您选择Serializable
,我建议您构建对象,以便可以将其写入Bundle
并从中读取。使用static MyObject.make(Bundle)
方法和实例Bundle save()
方法将所有常量和读/写保存在一个位置。