Удаление всех SharedPreferences при выходе - PullRequest
0 голосов
/ 11 сентября 2018

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

Рабочий процесс моего приложения идет следующим образом, если это помогает:

Вход в систему -> Сохранить данные пользователя в настройках -> Пуск MainActivity -> Выход -> Очистить настройки -> Пуск LoginActivity

Проблема вызвана использованием настроек по умолчанию?Или это потому, что я вызвал финиш ()?Я пробовал apply() и commit().Ни один не работал.Настройки все еще существуют, когда я пытался получить к ним доступ в LoginActivity.Как мне очистить мои предпочтения?

private void logout(){
    // clear preferences
    SharedPreferences sharedPreferences = this.getPreferences(Context.MODE_PRIVATE);
    sharedPreferences.edit().clear().apply();
    Intent i = new Intent(this, LoginActivity.class);
    startActivity(i); // call LoginActivity and finish this one.
    finish();
}

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018

Я бы предложил вам использовать библиотеку, например Easy Prefs , для обработки общих настроек. У него есть метод Prefs.clear(), поэтому в основном это очистит все общие префы. Это облегчит вам обработку sharedPrefs.

Также вы можете очистить sharedpref с помощью следующей функции -:

public void clearPrefs(){
    SharedPreferences mySPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = mySPrefs.edit();
    editor.clear();
    editor.apply();
}
0 голосов
/ 11 сентября 2018

Проблема в том, что вы используете getPreferences() вместо getSharedPreferences() или getDefaultSharedPreferences().

getPreferences() Получение объекта SharedPreferences для доступа предпочтения, которые являются частными для этой деятельности. Это просто вызывает базовый метод ContextWrapper.getSharedPreferences(String, int), передавая имя класса этого действия в качестве имени предпочтения.

Так как getPreferences() использует имя класса в качестве имени файла настроек, то есть вы вставляете в один файл Pref активности и очищаете другой.

См. Это для более подробной информации: https://developer.android.com/reference/android/app/Activity#getPreferences(int)

0 голосов
/ 11 сентября 2018

Использовать коммит

SharedPreferences sharedPreferences =  getSharedPreferences("YourKey", MODE_PRIVATE);
sharedPreferences.edit().clear().commit();
Intent i = new Intent(this, LoginActivity.class);
startActivity(i);
finish();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...