SharedPreferences возвращает неправильное значение и не обновляет текущие значения - PullRequest
0 голосов
/ 06 октября 2019

Я создал простой код для тестирования функции SharedPreferences на Android. Сначала инициализируется экземпляр SharedPreferences, и из него извлекается значение логического var, используя «false» в качестве значения по умолчанию, а затем устанавливается «true». Когда вызывается onStop, значение сохраняется в SharedPreferences как 'true', когда вызывается onDestroy, пара ключ-значение удаляется. Но происходит следующее: значение «true» до того, как оно установлено в методе onCreate, в то время как оно должно быть «false», а затем «true».

public class MainActivity extends AppCompatActivity {

    SharedPreferences preferences;
    private String KEY = "PREF_KEY";
    private String PREFS = "my_preferences";
    private static final String TAG = "MainActivity";
    boolean value;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        preferences = getSharedPreferences(PREFS, MODE_PRIVATE);

        value = preferences.getBoolean(KEY, false);
        Log.d(TAG, "onCreate: BEFORE " + value);
        value = true;
        Log.d(TAG, "onCreate: AFTER " + value);
    }
    @Override
    protected void onStop() {
        super.onStop();
        preferences.edit().putBoolean(KEY, value).apply();
    }

    @Override
    protected void onDestroy() {
        preferences.edit().clear().apply();
        super.onDestroy();
    }
}

1 Ответ

0 голосов
/ 06 октября 2019

Чтобы получить ожидаемое поведение, необходимо поставить super.onStop(); после preferences.edit().putBoolean(KEY, value).apply(); в onStop(), например:

@Override
protected void onStop() {
  preferences.edit().putBoolean(KEY, value).apply();
  super.onStop();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...