Данные были кэшированы в Android 6 (SharedPreferences)

Я использую SharedPreference, чтобы сохранить имя пользователя после входа пользователя в мое приложение, и очищаю его, если пользователь выходит из системы < / сильный>.

Я проверю это значение при запуске приложения, если для использования этого значения null пользователю требуется логин.

Однако, когда я проверяю с помощью android 6.0:

Login (save username - Toast show not null) > Logout (remove username - Toast show null) > Remove App > Reinstall app > StartApp (not login - Toast show not null, this value is user that used => issue)

Эта проблема не возникает с android ‹6.0.

Вот мой код:

init sharedpreference в приложении:

public static SharedPreferences getPref() {
    return mInstance.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
}

Отметьте для входа:

if (App.getPref().getString("username", null) == null){
   //Login
}

Сохранить при успешном входе в систему:

                App.getPref().edit()
                                .putString("username", s.getLoggedInUser().getUsername())
                                .putString("profilePicUrl", s.getLoggedInUser().getProfilePicUrl())
                                .putString("pk", s.getLoggedInUser().getPk())
                                .apply();

Очистить при выходе из системы:

   App.getPref().edit().clear().apply();

person MsBao    schedule 17.06.2016    source источник
comment
в чем именно твоя проблема?   -  person Gaurav    schedule 17.06.2016
comment
См. Строку 4 в моем вопросе со сценарием проблемы: после того, как я удалю приложение clear sharepreference, переустановите приложение и прочтите данные sharepreference, не равные нулю.   -  person MsBao    schedule 17.06.2016
comment
хорошо, это из-за автоматического резервного копирования, представленного в M   -  person Gaurav    schedule 17.06.2016


Ответы (1)


Это из-за автоматического резервного копирования. введен в Marshmallow.

Он создаст резервную копию ваших данных и будет использовать ее во время переустановки.

Если вы хотите отключить его в настройках -> Резервное копирование и сброс -> автоматическое восстановление

введите здесь описание изображения

Но для вашего приложения я предлагаю сделать общий pref.

с ключом "username" равным нулю во время выхода и фиксации.

или просто сделайте

android:allowBackup="false" в вашем манифесте

person Gaurav    schedule 17.06.2016
comment
Привет, @Gaurav. Я не знаю режима резервного копирования в Android 6.0. Большое тебе спасибо. - person MsBao; 17.06.2016
comment
Привет, @Gaurav, я обновляю свой код, но имя пользователя, которое было зарезервировано, прежде чем я изменил резервную копию на false, по-прежнему автоматически восстанавливается. Как убрать автоматическое восстановление из моего кода. - person MsBao; 18.06.2016
comment
о, тогда присвоение имени пользователя null при выходе из системы - единственный вариант - person Gaurav; 20.06.2016