0

我正在android上制作俄罗斯方块游戏作为学校项目,现在我使用共享偏好来保存游戏的当前状态,以便以后可以恢复,我已经意识到当您存储超过 100 个左右的首选项时,sharedprefernces 对象开始以一种奇怪的方式工作,我可以保存所有内容,但是当我尝试调用编辑器清除(e.clear + e.commit)时,它不会删除首选项。

我将不胜感激有关此问题的任何帮助

谢谢

4

2 回答 2

1

SharedPreferences是如何持久化数据的良好且轻量级的机制。

但我认为对于比赛来说,这根本不是一场胜利。SharedPreferences通常用于保存非结构化数据,例如,如果您有一些需要登录的应用程序,并且当用户成功登录时,您可以将此状态保存到SharedPreferences下一步,然后Activities检查用户是否已登录。但是在游戏中,你有(我猜是肯定的)结构化的数据结构(例如球员和他们的属性(值),比如达到的分数、输、赢等)。

所以我建议你考虑另一种数据持久化的机制。具体尝试考虑使用经典对象序列化的可能性,或者使用SQLiteDatabase它提供更复杂的解决方案如何持久化结构化数据。

一个主要优点是您可以持久化(序列化)整个对象,然后简单地反序列化它们(而不是将它们持久化为 SharedPreferences 中的特定“块”)。关于SQLite,它提供了与经典序列化几乎相同的解决方案,但对象在数据库中表示为表。

于 2013-05-13T08:21:45.650 回答
0

如果您需要删除特定值,请使用: SharedPreferences.Editor.remove()后跟commit()

将它们全部删除,SharedPreferences.Editor.clear()然后是commit()

(此处参考https://stackoverflow.com/a/3687333/1584654)。

但是,如果这些值仍然有限,则共享首选项应该不是问题。

于 2013-05-13T08:21:06.663 回答