【问题标题】:getting boolean from shared preference always returns false从共享首选项中获取布尔值总是返回 false
【发布时间】:2012-10-03 19:29:48
【问题描述】:

我将我的布尔值存储在我的偏好活动中:

OnPreferenceChangeListener locaListener = new OnPreferenceChangeListener() {    
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
                if(newValue.toString().trim().equals("true")){
                    editor.putBoolean("locationEnabled", true);
                }else if (newValue.toString().trim().equals("false")){
                    editor.putBoolean("locationEnabled", false);
                }
                editor.commit();
                return true;
            }
        };

并尝试在我的主要活动中像这样检索它:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean prefLocationEnabled = prefs.getBoolean("locationEnabled", false);

使用字符串的相同方法可以完美运行,但使用布尔值似乎总是返回默认值,即 false。有谁知道我做错了什么?

【问题讨论】:

  • 您确定正在呼叫editor.putBoolean("locationEnabled", true); 吗? newValue.toString().trim().equals("true") 的计算结果是否为真?
  • 是的,我确定在这两种情况下,我都使用 System.out 对其进行了测试。它存储价值但无法检索它

标签: android sharedpreferences


【解决方案1】:

一旦你在保存和加载时调用 getPreferences(MODE_PRIVATE),你就调用 PreferenceManager.getDefaultSharedPreferences(this);

我认为这不是相同的偏好。只使用其中一种

【讨论】:

    【解决方案2】:

    试试这个代码。如果你给出的参数是 true 或 false,它会返回你给出的值。

    Boolean tmp = null;
    tmp = sharedPreferences.getBoolean("key", tmp.getBoolean(""));
    

    它给你你得到的价值。

    【讨论】:

      猜你喜欢
      • 2017-10-28
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      • 2019-01-09
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多