我希望我的布尔值在共享首选项中保存为true,但它总是保存为false

时间:2017-10-17 14:18:13

标签: java android sharedpreferences

我试图将一个布尔值保存到值为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);
   }

2 个答案:

答案 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();