我试图将一个布尔值保存到值为true的共享首选项中但是当我记录它时,我一直看到它返回一个假值。请参阅下面的代码,同时请记住此代码位于片段内。
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);
}
答案 0 :(得分:2)
每次致电edit()
时,都会向您返回新的Editor
。根据文件
为这些首选项创建一个新的编辑器,您可以通过它来创建 对首选项中数据的修改和原子提交 这些更改回到SharedPreferences对象。
所以你可以做到
AppPreferences.edit().putBoolean("PROPERTYMANAGER_LOGGEDIN", true).commit();
或
editor.putBoolean("PROPERTYMANAGER_LOGGEDIN", true);
editor.commit();
但是在实例上调用putBoolean
而在另一个实例上调用commit
可能会有帮助
答案 1 :(得分:0)
您正在另一个实例上调用commit。
基本上AppPreferences.edit()
将为您提供一个新实例。
AppPreferences.edit().putBoolean("PROPERTYMANAGER_LOGGEDIN", true);
这是您放置布尔值的另一个实例。
使用您创建的同一实例。 您的代码应如下所示:
SharedPreferences.Editor editor = AppPreferences.edit();
transitionInterface.showDashboardIcons();
editor.putBoolean("PROPERTYMANAGER_LOGGEDIN", true);
editor.commit();