[英]I am expecting my boolean to be saved in shared preferences as true, however it always saves as false
我试图将一个布尔值保存到值为 true 的共享首选项中,但是当我记录它时,我一直看到它返回一个 false 值。 请参阅下面的代码,并记住此代码在一个片段中。
SharedPreferences AppPreferences = getActivity().getSharedPreferences("myPrefs", Activity.MODE_PRIVATE);
boolean propertyManagerLoggedIn = AppPreferences.getBoolean(PROPERTYMANAGER_LOGGEDIN, false);
if(!propertyManagerLoggedIn)
{
SharedPreferences.Editor editor = AppPreferences.edit();
transitionInterface.showDashboardIcons();
AppPreferences.edit().putBoolean("PROPERTYMANAGER_LOGGEDIN", true);
editor.commit();
//boolean vlaue = prefs.getbooleanflag(context, false);
Log.d("tag",""+propertyManagerLoggedIn);
}
else
{
Log.d("tag",""+propertyManagerLoggedIn);
}
下面是来自我的 AppPreferences 类的相关代码行
public final static String PROPERTYMANAGER_LOGGEDIN = "PROPERTYMANAGER_LOGGEDIN";
public static boolean propertyManagerLoggedn(Context context)
{
TinyDB settings = new TinyDB(context);
return settings.getBoolean(AppPreferences.PROPERTYMANAGER_LOGGEDIN);
}
每次您调用edit()
都会向您返回一个新的Editor
。 根据文档
为这些首选项创建一个新的编辑器,您可以通过它修改首选项中的数据并将这些更改自动提交回 SharedPreferences 对象。
所以你可以这样做
AppPreferences.edit().putBoolean("PROPERTYMANAGER_LOGGEDIN", true).commit();
或者
editor.putBoolean("PROPERTYMANAGER_LOGGEDIN", true);
editor.commit();
但是在一个实例上调用putBoolean
在另一个实例上commit
可能无济于事
您正在不同的实例上调用 commit。 基本上AppPreferences.edit()
会给你一个新的实例。
AppPreferences.edit().putBoolean("PROPERTYMANAGER_LOGGEDIN", true);
这是您放置布尔值的另一个实例。
使用您创建的相同实例。 您的代码应如下所示:
SharedPreferences.Editor editor = AppPreferences.edit();
transitionInterface.showDashboardIcons();
editor.putBoolean("PROPERTYMANAGER_LOGGEDIN", true);
editor.commit();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.