Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-在本地存储相当数量的数据,xml/json还是SQLite?_Android_Xml_Json_Sqlite_Storage - Fatal编程技术网

Android-在本地存储相当数量的数据,xml/json还是SQLite?

Android-在本地存储相当数量的数据,xml/json还是SQLite?,android,xml,json,sqlite,storage,Android,Xml,Json,Sqlite,Storage,长话短说:我正在重构我的一个老Android项目。以前,它使用的是序列化,速度非常慢,而且据我所知,对于Android应用程序来说,这是一个相当糟糕的想法。我正在寻找另一种方法来保存应用程序的用户特定数据和只读数据 双方都会有大量数据,我不确定是否有“好”的存储方式。基本上,该应用程序是一个小型RPG。有许多“贴图”表示为二维瓷砖阵列。每个磁贴都有许多属性,一些简单的原语或枚举,其他附加对象,如事件,它也可能包含各种对象,等等。仅20x20地图中就有400个磁贴,需要存储大量数据。除了存储这些数

长话短说:我正在重构我的一个老Android项目。以前,它使用的是序列化,速度非常慢,而且据我所知,对于Android应用程序来说,这是一个相当糟糕的想法。我正在寻找另一种方法来保存应用程序的用户特定数据和只读数据

双方都会有大量数据,我不确定是否有“好”的存储方式。基本上,该应用程序是一个小型RPG。有许多“贴图”表示为二维瓷砖阵列。每个磁贴都有许多属性,一些简单的原语或枚举,其他附加对象,如事件,它也可能包含各种对象,等等。仅20x20地图中就有400个磁贴,需要存储大量数据。除了存储这些数据外,它还需要存储大量特定于用户的数据,例如访问了哪些磁贴,哪些事件成功运行,等等

我一直在研究保存这些数据的方法,但我似乎无法解决一些问题。我想这可以归结为XML或JSON与SQLite。XML或JSON在未来的更改方面会更加灵活,这是因为我希望数据具有灵活性,也就是说,向现有对象添加新属性,根据需要添加新对象,等等。SQLite不像您必须更改模式、调整查询和索引等那样容易延展,但是我在过去没有真正使用过SQLite,所以可能有一些特性可以帮助简化这个过程。不过,我也希望快速随机访问数据,以避免在有帮助的情况下将所有内容一次性加载到内存中。例如,当从一个映射移动到另一个映射时,我更愿意只在需要时加载下一个映射,而不是将所有内容都保存在内存中,这是SQLite的亮点,因为我能够直接查询数据,而不是遍历JSON/XML文件来查找可能分散的数据,即加载映射,但是事件中包含的事件和对象可能不是该地图所独有的,并且很容易位于文件的其他位置或完全位于另一个文件中。然而,规范化SQLite中的数据将意味着大量的表和相当多的对象解构/重构

写入用户数据只会在用户手动保存游戏时发生,因此写入性能不是什么大问题


我有时有一种过度分析的倾向,对这样的事情很感兴趣。也许这两种情况都不一定是“错误的”,我担心的是那些微不足道的事情。也许还有其他我没有考虑过的案例。我使用过Hibernate,并考虑过使用ORMLite之类的工具来处理大量的数据库细节,但这需要大量的改进,可能比我需要为其他选项做的更多。

我建议您使用SQLite。考虑到您试图存储的数据量,我认为这是最有意义的

至于你对它不够灵活的担忧,我认为这一点是正确的。只需使用ContentProvider。ContentProviders使更新db模式和查询变得非常容易,而不会影响现有功能。如果您使用ContentProvider,您甚至可以在将来交换持久数据策略,以及同时使用不同的策略


您看过Active Android吗?您还可以考虑,这会使您在内容上具有更大的灵活性,但不会像SQLite那样容易地查询。还有一个选项是使用XML/JSON文件的索引结构目录(而不是一个单一的、大量的文件),就像git那样,效果非常好。它提供灵活的存储、文件标签和类似sql的文件搜索。