【问题标题】:Is it a good idea to store multiple values as SharedPreference?将多个值存储为 SharedPreference 是个好主意吗?
【发布时间】:2018-11-18 06:07:37
【问题描述】:

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

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

将值存储为 SharedPreference 是否是个好主意?

我的代码:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("London", "1");
editor.commit(); 

下次当用户标记另一个地方时:

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

我问的是那里可能存储的地方数量,在我的情况下最多为 200 个。我通常使用这种存储来存储一些设置左右,但我认为这也是一种存储值的简单方法,我不想使用数据库或类似的东西进行存储。

【问题讨论】:

  • 如果你想向用户显示所有“访问过”的地方会发生什么?您可能希望更早地使用Sqlite 。你不会用SharedPreferences 能力来限制自己,但你会拥有更多的灵活性。 SharedPreferences 一般用于存储简单的设置键/值等原始数据,方便访问。
  • 我不想使用数据库或任何类似的东西进行存储。 - 你认为你不想,但你这样做
  • 不要害怕使用 SQLite。有很多很棒的图书馆,比如 Room developer.android.com/training/data-storage/room
  • @wotan 你不想使用像 SQLite 和 parse.com 这样的数据库
  • Ozgur - 例如,当我想显示所有访问过的地方时,我将简单地检查该地方是否存储在“for”循环中的 SharedPreferences 中。这些位置是从 JSON 加载的,当我解析它时,我可以立即检查名称是否存储为 SharedPreference。但我会按照你们中的更多人的建议尝试研究有关 SQL lite 的内容

标签: android local-storage android-sharedpreferences


【解决方案1】:

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

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

我认为在这种情况下您实际上确实想要使用数据库。会有回报的。

【讨论】:

  • 我学习了一些关于 SQLite 的知识,但我没有意识到它可以用作本地数据库!在这种情况下,我将使用 SQLite 进行存储。谢谢!
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

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

    realm.io

    Realm vs Room vs ObjectBox

    【讨论】:

      猜你喜欢
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      相关资源
      最近更新 更多