SharedPreferences返回错误的值并且不更新当前值

时间:2019-10-05 22:47:43

标签: java android sharedpreferences

我创建了一个简单的代码来测试android上的SharedPreferences功能。首先初始化SharedPreferences的实例,并使用默认值“ false”从中检索布尔变量的值,然后将其设置为“ true”。调用onStop时,该值以'true'的形式存储在SharedPreferences中,调用onDestroy时,键-值对被删除。但是会发生的是,在onCreate方法中设置该值之前,该值为“ true”,而应为“ 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 :(得分:0)

要获得预期的行为,您需要将super.onStop();中的preferences.edit().putBoolean(KEY, value).apply(); 放在之后,onStop(),如下所示:

@Override
protected void onStop() {
  preferences.edit().putBoolean(KEY, value).apply();
  super.onStop();
}