Julio Didier Maciel
Julio Didier Maciel

Reputation: 157

Can SharedPreferences be not saving?

I have one application that uses SharedPreferences to record the checkin or checkout state of the user. If the checkin is pressed, it's button is grayed out the checkout becomes available, the opposite work as well.

However some users tells me that "sometimes" they will make another checkin on the next day and the checkout is still available.

Im supecting that they are forgetting to tap it, but i want to know if is there by any chance that this SharedPreferencces get cleared by itself?

this is the part of my code that i save the checkin state:

SharedPreferences preferences = getSharedPreferences("MyPreferences", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = preferences.edit();
            editor.putInt("statuscheckin", 1);    //1 for checkin, 0 for checkout            
            editor.commit();

this is the part where i check it

if (getSharedPreferences("MyPreferences", Context.MODE_PRIVATE).getInt("statuscheckin", 0) == 1) {...}

Upvotes: 1

Views: 71

Answers (2)

Niharika Arora
Niharika Arora

Reputation: 31

Unless you clear the storage/cache, SharedPreferences won't get cleared by itself.

  • Make sure you are not clearing it by yourself for any condition happening.
  • If you are getting the default value only, it's possible that you are using it before the value gets committed.

Upvotes: 1

Brahma Datta
Brahma Datta

Reputation: 1112

Try this code,

Session Manager code:

SharedPreferences sharedPreferences;
SharedPreferences.Editor editor;
Context context;

public static final String KEY_CHECKIN= "checkin";

public void setCheckin(boolean login){
    editor = sharedPreferences.edit();
    editor.putBoolean(KEY_CHECKIN,checkin);
    editor.apply();
}

public boolean getCheckin(){
    return sharedPreferences.getBoolean(KEY_CHECKIN,false);
}

In your Java code:

SessionManager sessionmanager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
sessionmanager = new SessionManager(this);

//Condition for checkin

if(user checkedIn){
sessionmanager.setCheckin(true);}

//Retrieving the value when user again opens the app:

if(sessionmanager.getCheckin()){}////proceed with your logic.

Upvotes: 0

Related Questions