2014-01-07 38 views
0

我很好奇在应用程序中存储数据的最佳方式,以便通过应用程序内部的更新和可读性进行存储。在移动应用程序中存储数据的最佳方式

基本上我有一个游戏我正在建设,它有层次,我需要检查用户是否已经完成关卡,如果他们有,那么它可以解锁下一个关卡,如果没有,离开下一个关卡。

所以我需要在手机上存储一个文件,我可以参考回去看看这个关卡是否被打过。

我已经做了一些研究,发现我可以使用Shared Preferences,Internal Data Storage或External Data Storage。我倾向于外部数据存储,直到有朋友指出人们经常擦拭他们的SD卡以放置新的音乐,视频和图片。但是,如果我使用内部数据存储,那么当我使用新功能和级别更新应用程序时,数据会丢失?共享偏好是否是最好的选择?

请您给我一些建议,说明存储数据的最佳方式是什么,以便在稍后的阶段最容易阅读,我该怎么做?我会存储一个关卡的节拍列表,然后交叉检查该列表的级别?

在此先感谢

+0

你从哪里阅读“更新应用程序时数据丢失”?我从来没有听说过(真正好奇,不是鸡巴)。 –

+0

多少数据,项目和字节? – zaph

回答

0

在我的游戏我节省存储在内部数据存储的XML信息,所以数据会丢失,只有当用户卸载应用程序或选择“清除数据”,但在我的情况下,我有很多信息要保存,如星星,积分和一些奖励信息,如果你只需要保存级别,我认为SharedPreferences是最好的选择...
最后一个资源是保存这个在web服务中的信息,但我不认为这是事实。

1

我会推荐在iOS上使用CoreData或SQLite来存储应用程序的数据。因为XML每次加载时都需要进行解析,因此XML的使用起来非常麻烦,因此它不是非常优化的。在iOS上,我们有NSUserDefaults,它提供存储功能,但建议存储更少量的数据。

+0

使用sqlite将使应用程序在Android和iOS世界之间更加便携。我同意使用XML很麻烦。学习使用SQL也是一项很好的技能。 –

1

如果您使用内部数据存储或共享首选项,则不会在应用程序更新(甚至OS更新)上擦除数据。只有在用户卸载应用程序,“清除数据”或擦除整个设备时才会被抹去。共享首选项实际上是应用程序内部数据存储位置内的文件,由操作系统管理(并且没有其他应用程序可以访问它)。

这听起来像是你的用例,共享首选项是要走的路。这正是他们的目标。至于如何构建您存储的键/值,完全取决于您的应用程序......我会说可能有像“passed_level_1”等键。不幸的是,共享首选项不支持数组(不是键,也不是为值)。

另外请记住,在有根的设备上,用户可以访问该数据(即使它不是纯文本格式)。所以如果这是一个安全问题,考虑使用加密或其他类型的安全存储。使用外部存储也有这个问题,更为重要的是,因为所有用户都可以访问它,而不仅仅是根植用户。

+0

哦,好吧,我的印象是这样的(就像在Thenewboston的youtube android开发系列中说的那样,当你更新应用程序时,使用内部数据存储将会丢失内容) – VaMoose

+0

我从来没有听说过。一个新版本的应用程序,只要新版本与旧版本具有相同的签名(否则Android不会让用户升级,他们必须先卸载旧版本,这将删除内部应用程序数据和偏好)但是,在正常情况下,没有任何东西丢失。 –

相关问题