我已经找遍了,似乎找不到我的问题的答案。由于某些原因,在切换活动之后,保存在SharedPreferences
中的数据会重新出现。为什么我的SharedPreferences仍然和我清除它之前完全一样,我如何修复这个问题?
在第一个练习中:
@Override
protected void onStop() {
super.onStop();
SharedPreferences sp = this.getSharedPreferences(TEMP_KEY, MODE_PRIVATE);
Gson gson = new Gson();
String objectJson = gson.toJson(object, Object.class);
String activityJson = "FirstActivity";
SharedPreferences.Editor editor = sp.edit();
editor.putString(CONTINUE_KEY, objectJson);
editor.putString(ACTIVITY_KEY, activityJson);
editor.apply();
}
public void onClickSave() {
Gson gson = new Gson();
String objectJson = gson.toJson(object);
SharedPreferences sp getSharedPreferences(SAVE_KEY, MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString(object.getDate(), objectJson);
editor.apply();
SharedPreferences spTemp = this.getSharedPreferences(TEMP_KEY, MODE_PRIVATE);
spTemp.edit().clear().apply();
// go back to the main menu
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
在应用()之前:
在apply()之后:
主活动中的:
SharedPreferences sp = this.getSharedPreferences(TEMP_KEY, MODE_PRIVATE);
从主要活动中:
发布于 2019-03-12 05:31:04
保存到共享首选项
SharedPreferences sp = getSharedPreferences("test" , MODE_PRIVATE);
SharedPreferences.Editor spEditor = sp.edit();
spEditor.putString("hello1" , "hello11");
spEditor.putString("hello2" , "hello22");
spEditor.apply();
从共享首选项中清除
SharedPreferences sp1 = getSharedPreferences("test" , MODE_PRIVATE);
SharedPreferences.Editor spEditor1 = sp1.edit();
spEditor1.clear();
spEditor1.apply();
从共享首选项中获取
SharedPreferences sp2 = getSharedPreferences("test" , MODE_PRIVATE);
String value = sp2.getString("hello1" ,"noting");
Log.i("test_sp" , " == == ==" +value);
发布于 2019-03-12 11:22:34
对于First,您可以在onStop()
和onClickSave()
方法中使用不同的getSharedPreferences(String name, int mode)首选项文件名:
// in onStop()
SharedPreferences sp = this.getSharedPreferences(TEMP_KEY, MODE_PRIVATE);
// in onClickSave()
SharedPreferences sp getSharedPreferences(SAVE_KEY, MODE_PRIVATE);
您需要使用相同的文件名才能访问相同的首选项。
Second,onStop()
并不总是保证会被调用,因此它不是保存您的首选项的可靠方法。相关答案:Is onStop() always preceded by onPause()
Third,当您需要保留该值时,请始终保存首选项。不要等到以后再保存它,并希望可以依赖于onPause()
、onStop()
或onDestroy()
。永远不要假设你的应用程序会被用户或系统优雅地终止。
https://stackoverflow.com/questions/55110523
复制相似问题