我创建了一个简单的代码来测试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();
}
}
答案 0 :(得分:0)
要获得预期的行为,您需要将super.onStop();
中的preferences.edit().putBoolean(KEY, value).apply();
放在之后,onStop()
,如下所示:
@Override
protected void onStop() {
preferences.edit().putBoolean(KEY, value).apply();
super.onStop();
}