【问题标题】:Android: Unbale to save boolean in SharedPreferencesAndroid:无法在 SharedPreferences 中保存布尔值
【发布时间】:2015-07-31 16:06:46
【问题描述】:

大家好,我无法使用 SharedPreferences 保存布尔值。由于某些原因,该值始终为真。这是我保存值的方法:

public static void setSharedPreference(Context ctx, String keyValue, boolean value){
    SharedPreferences sp = ctx.getSharedPreferences(Constants._preferencesName, Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    editor.putBoolean(keyValue,value);
    editor.commit();
}

这就是我找回它的方式:

 public static boolean getBooleanPreference(Context ctx, String keyValue){
    boolean prefValue;
    SharedPreferences sp = ctx.getSharedPreferences(Constants._preferencesName, ctx.MODE_PRIVATE);
    prefValue = sp.getBoolean(keyValue, false);

    return prefValue;
}

怎么了?!

【问题讨论】:

  • 您确定在两个调用中使用相同的_preferencesNamekeyValue?因为我有点怀疑......
  • 是的,我对此持肯定态度
  • 如您所见,_preferenceName 是一个常数,所以......它总是一样的!并且两个方法中的Context是一样的
  • 默认值为 false。如果 sp.getBoolean(K,false) 返回 true,则它肯定会存储
  • 看我的回答。如果我是对的,那么可能是您正在阅读前一段时间写的值

标签: android boolean sharedpreferences


【解决方案1】:

您的代码在语法上是正确的,但我怀疑您在保存时传递的 Context 与从首选项读取时传递的不同。这将导致访问不同共享首选项存储。如果您在不同的活动中进行写入和读取并决定将this 作为上下文传递,这将特别容易上手。除非有这样做的理由,否则您很可能希望从应用中的任何位置获取您的偏好,然后始终使用应用上下文 (getApplicationContext())。

【讨论】:

  • 天哪……你说得对,我在 2 个不同的课程中设置了相同的偏好。含义2不同的上下文。非常感谢你帮我找到我的错误:)
【解决方案2】:

您的代码中的一切都是正确的。

ONLY错误的可能性是在您调用这些方法时。放入和检索数据时请使用getApplicationContext()

请为应用执行“清除数据”并从干净的 SharedPreference 开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多