SharedPreferences变量始终返回false

时间:2015-12-30 20:58:11

标签: android sharedpreferences

我在Android guide的分步指南后面使用了偏好片段。

我正在尝试使用此片段设置一些首选项,因此稍后在代码中我可以检查每个变量的值以执行操作。

Mi Preference片段工作正常。但是,当我尝试在代码的其他地方恢复CheckedBoxPreference的值时,它总是返回false。

这是首选项xml文件:

```{r}
results <- someFun("ice cream", 10)
```

这是我使用SharedPReferences

所做的课程
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:persistent="true"
    >
    <PreferenceCategory
        android:title="NOTIFICACIONES"
        android:key="pref_key_storage_settings">

    <CheckBoxPreference
        android:key="sendMail"
        android:defaultValue="false"
        android:persistent="true"
        android:summary="Send emails to contacts"
        android:title="E-mail"/>
</PreferenceCategory>
</PreferenceScreen>

这就是我检查选项是否被选中的方式,因此我可以向客户发送/不发送电子邮件

public class Prefs{
    private static Prefs myPreference;
    private SharedPreferences sharedPreferences;
    private static final String NOMBRE_PREFERENCIAS = "MisPreferencias";

    public static Prefs getInstance(Context context) {
        if (myPreference == null) {
            myPreference = new Prefs(context);
        }
        return myPreference;
    }

    private Prefs(Context context) {

        sharedPreferences = context.getSharedPreferences(NOMBRE_PREFERENCIAS,context.MODE_PRIVATE);
    }

 public Boolean getBoolean(String key)
    {
        boolean returned = false;

        if (sharedPreferences!= null) {
            returned = sharedPreferences.getBoolean(key,false);
        }

        return returned;
    }
}

正如我所说,奇怪的是它在设置片段上是持久的(如果我选择sendEmmail选项,即使我关闭应用程序并重新打开它也会被选中。但是,当我使用my方法检查值时,它总是返回false。

我做错了什么?

谢谢

1 个答案:

答案 0 :(得分:3)

由于您使用的是偏好片段,因此您应该使用PreferenceManager.getDefaultSharedPreferences(android.content.Context)来检索您的偏好设置。您目前正在使用命名偏好设置。

来自developer.android.com on PreferenceFragment

  

将Preference对象的层次结构显示为列表。这些偏好   将在用户交互时自动保存到SharedPreferences   跟他们。要检索的是SharedPreferences的实例   此片段中的首选项层次结构将使用,调用   带有上下文的getDefaultSharedPreferences(android.content.Context)   与此片段相同的包。

所以行

sharedPreferences = context.getSharedPreferences(NOMBRE_PREFERENCIAS,context.MODE_PRIVATE);

应替换为:

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);