简体   繁体   中英

I am expecting my boolean to be saved in shared preferences as true, however it always saves as false

I am trying to save a boolean into shared preferences with a value of true but when I log it I keeping seeing it returning a false value. Please see the code below and also bear in mind that this code is within a fragment.

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

and below is the relevant lines of code from my AppPreferences class

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

every time you call edit() a new Editor is being returned to you. Accordingly to the documentation

Create a new Editor for these preferences, through which you can make modifications to the data in the preferences and atomically commit those changes back to the SharedPreferences object.

so you can either do

AppPreferences.edit().putBoolean("PROPERTYMANAGER_LOGGEDIN", true).commit();

or

 editor.putBoolean("PROPERTYMANAGER_LOGGEDIN", true);
 editor.commit();

but calling putBoolean on an instance and commit on an other won't probably help

You are calling commit on a different instance. Basically AppPreferences.edit() will give you a new instance.

AppPreferences.edit().putBoolean("PROPERTYMANAGER_LOGGEDIN", true);

This is another instance in which you are putting the boolean value.

Use the same instance which you have created. Your code should look like this:

SharedPreferences.Editor editor = AppPreferences.edit();
         transitionInterface.showDashboardIcons();
         editor.putBoolean("PROPERTYMANAGER_LOGGEDIN", true);
         editor.commit();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM