【问题标题】:Android sharedPreferences set default values issueAndroid sharedPreferences 设置默认值问题
【发布时间】:2013-11-08 10:37:58
【问题描述】:

我在我的项目中使用了一些活动。其中之一是从 PreferenceActivity 扩展而来的。 我有一个 CheckBoxPreference 和一个 EditTextPreference,我可以使用以下方法从所有其他活动中获取值:

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
pref = sharedPrefs.getString("edit_text_pref", "error");

但是当我打开我的应用程序时,值必须设置为默认值,因此我正在使用:

PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().clear().commit(); 

在我的主要活动中。 一切都应该没问题,但是如果我在从首选项菜单设置它之前尝试获取首选项,我会得到“错误”,而不是我在 xml 首选项文件中设置的默认值。 如果我评论 getDefaultSharedPreferences 行,它工作正常,但显然当我打开应用程序时,我得到了旧的偏好。 如何绕过这个问题?

【问题讨论】:

  • 不要使用getDefaultSharedPreferences,在两个类中使用SharedPreferences prefs = context.getSharedPreferences(TAG, Context.MODE_PRIVATE);
  • 我用它来设置默认值:PreferenceManager.setDefaultValues(this, R.xml.preferences, false);

标签: android android-preferences


【解决方案1】:

看看 http://developer.android.com/reference/android/preference/PreferenceManager.html#setDefaultValues%28android.content.Context,%20int,%20boolean%29

你一定在用这个setDefaultValues (Context context, int resId, boolean readAgain) 之类的东西

PreferenceManager.setDefaultValues(this, R.xml.preference, false);

仔细查看参数中的注释部分。这是关于再次阅读 参数

context 共享首选项的上下文。

resId 首选项 XML 文件的资源 ID。

readAgain 是否重新读取默认值。如果为 false,则仅当过去从未调用过此方法时(或者默认值共享首选项文件中的 KEY_HAS_SET_DEFAULT_VALUES 为 false),此方法才设置默认值。要尝试绕过此检查再次设置默认值,请将 readAgain 设置为 true。

注意:这不会将首选项重置为其默认值。对于该功能,请使用 getDefaultSharedPreferences(Context) 并清除它,然后调用此方法并将此参数设置为 true

所以我想在清除它之后你需要通过将 readAgain 传递为 true 来将其设置为默认值

类似

PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().clear().commit();
 PreferenceManager.setDefaultValues(this, R.xml.preference, true);

【讨论】:

    【解决方案2】:

    您收到的是默认值本身,即“错误”,因为使用首选项,当您获得任何首选项的值时,您需要指定一个值,如果之前未设置首选项,则该值将返回。在您的情况下,当您在这里pref = sharedPrefs.getString("edit_text_pref", "error"); 将默认值设置为“错误”时,这就是您获得的默认值。

    【讨论】:

      【解决方案3】:

      好吧,我认为“错误”是在读取值时使用的值,而不是在未设置值时使用的值!!

      谢谢,应该可以了,我去试试

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-20
        • 2012-05-30
        • 1970-01-01
        • 2018-10-14
        相关资源
        最近更新 更多