Android 将多个值存储为SharedReference是一个好主意吗?

Android 将多个值存储为SharedReference是一个好主意吗?,android,local-storage,android-sharedpreferences,Android,Local Storage,Android Sharedpreferences,在我的android应用程序中,我有大约100个位置(最多200个)。我希望允许用户将每个地方标记为已访问并存储此选择 因此,用户可以标记/取消标记他已经访问了一些地方/城市 如果我将这些值存储为SharedReference,这是一个好主意吗 我的代码: SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = shar

在我的android应用程序中,我有大约100个位置(最多200个)。我希望允许用户将每个地方标记为已访问并存储此选择

因此,用户可以标记/取消标记他已经访问了一些地方/城市

如果我将这些值存储为SharedReference,这是一个好主意吗

我的代码:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("London", "1");
editor.commit(); 
下次用户标记另一个位置时:

editor.putString("Paris", "1");

我问,由于数量的可能的地方存储在那里,这将是最大的200在我的情况下。我通常使用这种存储只是为了存储一些设置,但我认为这也是存储值的一种简单方法。在我的情况下,我不想使用数据库或任何类似的存储方式。

SharedReferences是保存数据的键/值方式。我认为保存大量结构化数据是不合适的,因为必须为每个值定义一个键


对于您的情况,使用SQLite可能是一个更好的选择。

这是否是一个好主意取决于您的需求和期望。如果您这样存储数据,它肯定会工作,但会有一些限制:

  • 向用户显示位置列表可能会很复杂。如果将一些其他数据存储到共享首选项中,则需要一种将位置与其他数据区分开来的方法。在这种情况下,您可能需要为所有密钥添加前缀,例如“place_London”、“place_Paris”等
  • 您依赖于英文键名,因此如果您支持其他语言,您可能会遇到本地化问题
  • 支持版本控制和可伸缩性将困难得多。例如,如果以后您有一个名为“Place”的实体,并且它的信息比带有标志的名称更多,那么将其保留在共享首选项中会困难得多。例如,如果在某个时候你想在所有地方添加相应的国家名称,你会怎么做

我认为在这个场景中,您确实希望使用数据库。这会有回报的。

你应该改用更可靠的方式将数据存储在存储器中,而不是使用SharedReference

Sqlite是一个很好的选择,但是如果您不喜欢编写
SQL查询
,并且想要在存储中存储数据的解决方案,
Realm
是一个不错的选择

虽然在实现之前,请阅读更多关于使用领域的利弊。您可以在此处阅读有关Realm的更多信息:-


如果要向用户显示所有“已访问”的位置,会发生什么情况?您可能希望更早地使用Sqlite。您将不会限制自己使用
SharedReferences
功能,但您将拥有更大的灵活性。SharedReference通常用于存储简单的设置键/值和其他原始数据,以便于访问。我不想使用数据库或任何类似的存储方式。-您认为您不需要,但您并不害怕使用SQLite。有很多很好的库,比如Room@wotan,你不想使用任何数据库,比如SQLite和parse.comzgur,我只需要简单地检查一下这个地方是否存储在'for'循环中的SharedReferences中,例如,当我想显示所有访问过的地方时。位置是从JSON加载的,当我解析它时,我可以立即检查名称是否存储为SharedReference。但我会尝试研究一些关于SQLLite的东西,因为你们中的更多人建议我学习了一些关于SQLite的知识,但我没有意识到它可以用作本地数据库!在这种情况下,我将使用SQLite进行存储。非常感谢。