Может ли SharedPreferences не сохранять? - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть одно приложение, которое использует SharedPreferences для записи состояния регистрации или извлечения пользователя.Если регистрация нажата, ее кнопка отображается серым цветом, становится доступным оформление заказа, и наоборот.

Однако некоторые пользователи говорят мне, что «иногда» они делают повторную регистрацию на следующий день, и проверка выполняетсядо сих пор доступен.

Я подозреваю, что они забывают нажать на него, но я хочу знать, есть ли какой-нибудь шанс, что эти SharedPreferencces будут очищены самостоятельно?

это часть моего кода, которую ясохранить состояние регистрации:

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

это та часть, где я проверяю

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

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

До тех пор, пока вы не очистите хранилище / кеш, SharedPreferences не будет очищен сам по себе.

  • Убедитесь, что вы не очищаете его самостоятельно для каких-либо условий.
  • Если выполучают только значение по умолчанию, возможно, вы используете его до того, как значение будет зафиксировано.
0 голосов
/ 26 февраля 2019

Попробуйте этот код,

Код диспетчера сеансов:

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

В вашем коде Java:

SessionManager sessionmanager;

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

// Условие для регистрации

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

// Получение значения, когда пользователь снова открывает приложение:

if(sessionmanager.getCheckin()){}////proceed with your logic.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...