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

时间:2018-06-08 08:12:58

标签: android local-storage android-sharedpreferences

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

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

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

我的代码:

readFile()

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

io.EOF

我问的是,由于存储的可能位置数量很多,在我的情况下最多可以存储200个。我通常使用这种存储只是为了存储一些设置,但我认为这也是一种简单的方法来存储我的情况下的值,我不想使用数据库或任何类似的存储。 / p>

3 个答案:

答案 0 :(得分:3)

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

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

我认为在这种情况下你实际上 DO 想要使用数据库。它会得到回报。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

Sqlite是不错的选择,但如果您不想编写SQL Queries并希望在您的存储中存储数据的解决方案,Realm是一个惊人的选择。

虽然在实施之前请详细了解使用领域的优缺点。您可以在这里阅读有关Realm的更多信息: -

realm.io

Realm vs Room vs ObjectBox