【问题标题】:Why does SharedPreferences need two keys?为什么 SharedPreferences 需要两个键?
【发布时间】:2019-03-17 10:48:38
【问题描述】:

我正在尝试构建一个对象来处理我所有的SharedPreferences,因为它们主要用于整个应用程序,我不太明白为什么需要两个键才能获得一个值。

调用如下所示:

context.getSharedPreferences(FirstKey, Context.MODE_PRIVATE).getString(SecondKey, default)

我知道它基本上是一个二维数组。 FirstKey 为我提供了一组键值对,我可以使用我的SecondKey 来获取我的值。我明白了,如果我有几十个SharedPreferences,这可能会派上用场来管理它们并防止混淆/不必要的覆盖。

但是,如果我只有 10 个偏好,我还是保存了这是否有必要,或者我的所有偏好只使用一个 FirstKey 是否合理?

【问题讨论】:

    标签: android kotlin sharedpreferences


    【解决方案1】:

    但这有必要吗?如果我只有 10 个偏好,我还是会保存 还是只使用一个 FirstKey 作为我所有的 偏好?

    因此,对于这种情况,您可以通过使用 getDefaultSharedPreferences() 来避免使用 FirstKey,如下所示:

    SharedPreferences.Editor editor =  PreferenceManager.getDefaultSharedPreferences(context).edit();
    editor.putString("myKey", "myValue");
    editor.apply();
    

    或阅读已设置的首选项:

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    String myPref = prefs.getString("myKey", "myDefaultValue"); 
    

    【讨论】:

      【解决方案2】:

      我想这是为了封装、组织和管理更好的数据组(第一个键值)您想要存储(第二个键值)。因此,如果您想检索所有设置首选项,您可以按设置文件(第一个键)对它们进行分组。或者,如果您想删除有关用户偏好(首选语言、首选货币..)的所有存储值,那么您可以在“UserPref”文件(第一个键)中组织这些数据,然后您可以在其中迭代以删除所有这些都在您注销时或您认为对您的用户体验有用的任何博客上。

      【讨论】:

        【解决方案3】:

        第一个键 检索并保存首选项文件的内容

        第二键 检索并保存此文件中的值

        【讨论】:

        • 我明白了。我的问题更多是关于如何正确使用它。制作一个处理所有 Preferences 并将它们全部写入同一个文件的对象是否合理?
        • public static SharedPreferences getPrefs(Context context) { return context.getSharedPreferences("prefs", Context.MODE_PRIVATE); }
        【解决方案4】:

        您只能将“FirstKey”用于您的所有偏好,并且通常只能像这样开发我们。您可以通过在 getSharedPreference() 时更改“第一个键”来创建多个共享首选项实例。假设您希望项目中的两个不同模块有两个不同的共享偏好,然后更改“FirstKey”参数,在这种情况下,您有两个在存储和从偏好中获取数据时要小心,因为您有两个不同的共享偏好。

        【讨论】:

          【解决方案5】:

          正如您所说的,第一个键代表一组键值对(实际上与单个文件非常相似),第二个键可帮助您获取该文件/组中的值。

          我个人认为这种设计很棒,尤其是在您可能希望将所有值分成不同类别的情况下。如果您的应用程序“小”,您可以将所有值保存在一个文件/组中。否则,您可以将所有值拆分为单独的文件/组。

          我希望这会有所帮助.. 编码愉快!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-11-04
            • 1970-01-01
            • 1970-01-01
            • 2020-01-25
            • 1970-01-01
            • 1970-01-01
            • 2018-01-20
            • 1970-01-01
            相关资源
            最近更新 更多