gpt4 book ai didi

android - SharedPreferences 变量始终返回 false

转载 作者:行者123 更新时间:2023-11-29 17:26:14 27 4
gpt4 key购买 nike

我正在按照 Android guide 上的分步指南使用 Preference Fragments| .

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

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

这是首选项 xml 文件:

<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>

这是我为使用 SharedPReferences 而完成的类(class)

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;
}
}

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

Prefs preferences = Prefs.getInstance(getApplicationContext());
if(preferences.getBoolean("sendMail")
{
// .... send email
}

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

我做错了什么?

谢谢

最佳答案

由于您使用的是首选项 fragment ,因此您应该使用 PreferenceManager.getDefaultSharedPreferences(android.content.Context)检索您的偏好。您目前正在使用命名首选项。

来自 developer.android.com on PreferenceFragment :

Shows a hierarchy of Preference objects as lists. These preferences will automatically save to SharedPreferences as the user interacts with them. To retrieve an instance of SharedPreferences that the preference hierarchy in this fragment will use, call getDefaultSharedPreferences(android.content.Context) with a context in the same package as this fragment.

所以行

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

应该替换为:

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);

关于android - SharedPreferences 变量始终返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34537143/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com