在Android中从一个对象实现Serializable和Parcelable接口 - 冲突

4
我有一个对象需要保存到文件以便重复使用。这个对象的类已经实现了Parcelable接口,用于在意图中使用。我知道通过实现Serializable接口来保存对象,但是当我这样做时,在包含此对象的类中使用putExtra方法时会出错,因为SerializableParcelable都有这个方法。
有没有办法避免这种情况发生,或者有没有其他方式可以轻松地保存和重新加载我的对象状态?
我查看了一些文章,但对如何保存我的对象没有更多了解。先谢谢了。
3个回答

3
我认为 ParcelableSerializable 都可以用不同的方式实现相同的目标,性能也是不同的。因此,如果您的对象层次结构中的某个类已经实现了 Parcelable 接口,您可以覆盖其 writeToParcel 方法,调用其 super(以便如果这些成员是按照这种方式实现的,则会将超类的成员写入包裹),然后,您应该将自己的属性写入包裹,始终记住使用保存它们的顺序来检索它们(FILO 数据结构)

编辑

只需像这里描述的那样将您的对象转换为所需使用的类,即可解决冲突: https://dev59.com/2GYr5IYBdhLWcg3wLnZB#13880819

好的。我希望不必完全重构我的意图工作方式才能保存一个对象,但无论如何感谢您的回复。 - apostrophedottilde
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - apostrophedottilde
很抱歉,Parcelable 不是用来持久化的,因此它无法像 Serializable API 一样实现。你仍然需要实现 Serializable! - E. Fernandes
你的问题的答案是对你想要的类进行类型转换,就像这里描述的那样:https://dev59.com/2GYr5IYBdhLWcg3wLnZB#13880819 - E. Fernandes

1
我不知道你是否可以同时实现Serializable和Parcelable,但是如果要将一个类从Serializable转换为Parcelable,你可以使用这个插件:Android Parcelable Code generator。
首先删除实现Serializable,然后使用ALT + Insert并点击Parcelable,你就可以生成你的类了。

0

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

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


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