首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在安卓中使用clear()之后,我的SharedPreferences会在activites中保持不变?

为什么在安卓中使用clear()之后,我的SharedPreferences会在activites中保持不变?
EN

Stack Overflow用户
提问于 2019-03-12 05:15:43
回答 2查看 67关注 0票数 0

我已经找遍了,似乎找不到我的问题的答案。由于某些原因,在切换活动之后,保存在SharedPreferences中的数据会重新出现。为什么我的SharedPreferences仍然和我清除它之前完全一样,我如何修复这个问题?

在第一个练习中:

代码语言:javascript
复制
@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()之后:

主活动中的

代码语言:javascript
复制
SharedPreferences sp = this.getSharedPreferences(TEMP_KEY, MODE_PRIVATE);

从主要活动中:

EN

回答 2

Stack Overflow用户

发布于 2019-03-12 05:31:04

保存到共享首选项

代码语言:javascript
复制
SharedPreferences sp = getSharedPreferences("test" , MODE_PRIVATE);
SharedPreferences.Editor spEditor = sp.edit();
spEditor.putString("hello1" , "hello11");
spEditor.putString("hello2" , "hello22");
spEditor.apply();

从共享首选项中清除

代码语言:javascript
复制
SharedPreferences sp1 = getSharedPreferences("test" , MODE_PRIVATE);
SharedPreferences.Editor spEditor1 = sp1.edit();
spEditor1.clear();
spEditor1.apply();

从共享首选项中获取

代码语言:javascript
复制
SharedPreferences sp2 = getSharedPreferences("test" , MODE_PRIVATE);
String value =  sp2.getString("hello1" ,"noting");
Log.i("test_sp" , " == == ==" +value);
票数 0
EN

Stack Overflow用户

发布于 2019-03-12 11:22:34

对于First,您可以在onStop()onClickSave()方法中使用不同的getSharedPreferences(String name, int mode)首选项文件名:

代码语言:javascript
复制
// in onStop()
SharedPreferences sp = this.getSharedPreferences(TEMP_KEY, MODE_PRIVATE);

// in onClickSave()
SharedPreferences sp getSharedPreferences(SAVE_KEY, MODE_PRIVATE);

您需要使用相同的文件名才能访问相同的首选项。

SecondonStop()并不总是保证会被调用,因此它不是保存您的首选项的可靠方法。相关答案:Is onStop() always preceded by onPause()

Third,当您需要保留该值时,请始终保存首选项。不要等到以后再保存它,并希望可以依赖于onPause()onStop()onDestroy()。永远不要假设你的应用程序会被用户或系统优雅地终止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55110523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档