代码之家  ›  专栏  ›  技术社区  ›  Darksymphony

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

  •  2
  • Darksymphony  · 技术社区  · 6 年前

    在我的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在我的情况下。我通常使用这种存储只是为了存储一些设置,但我认为这也是一种简单的方法来存储值,在我的情况下,我不想使用数据库或任何类似的存储。

    3 回复  |  直到 6 年前
        1
  •  4
  •   Gennadii Saprykin    6 年前

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

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

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

        2
  •  1
  •   Tartar    6 年前

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

    对于您的案例,使用sqlite可能是一个更好的选择。

        3
  •  0
  •   Ganesh K    6 年前

    您应该切换到更可靠的方式来存储存储数据,而不是使用sharedpreferences。

    sqlite是个不错的选择,但是如果您不喜欢编写 SQL Queries 想要一个能将数据存储在存储器中的解决方案, Realm 是一个很好的选择。

    尽管在实现之前,请阅读更多关于使用realm的利弊。你可以在这里阅读更多关于realm的内容:

    realm.io

    Realm vs Room vs ObjectBox