我想清除我在第一个活动中放置的所有sharedpref,并在第二个活动中删除它。但是明确的功能不起作用..这是我的代码
public class MyActivity extends Activity implements View.OnClickListener {
/**
* Called when the activity is first created.
*/
public static final String PREFS_NAME = "ResumePrefs";
SharedPreferences settings;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
((Button)findViewById(R.id.button)).setOnClickListener(this);
}
@Override
protected void onResume() {
try{
Toast. makeText(this,settings.getString("answer_id",""),Toast.LENGTH_LONG).show();
}catch (Exception e){
Toast.makeText(this,e.toString(),Toast.LENGTH_LONG).show();
}
super.onResume();
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.button:
settings = getSharedPreferences(PREFS_NAME, 1);
SharedPreferences.Editor editor = settings.edit();
editor.putString("answer_id", "This is a test");
editor.commit();
Intent intent = new Intent(this,destroyPref.class);
startActivity(intent);
break;
}
}
}
和my2nd activty:
public class destroyPref extends Activity {
public static final String PREFS_NAME = "ResumePrefs";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.destroy);
}
@Override
public void onBackPressed() {
SharedPreferences settings = this.getSharedPreferences(PREFS_NAME,1);
settings.edit().clear();
settings.edit().commit();
super.onBackPressed();
}
@Override
protected void onResume() {
SharedPreferences settings = this.getSharedPreferences(PREFS_NAME,1);
settings.edit().clear();
settings.edit().commit();
super.onResume();
}
}
一旦我按下后退按钮,我将返回主要活动并期望清除首选项值,除非我再次按下按钮。我尝试了机器人背压和恢复,但仍然有sharedpref值仍然存在..我错过了什么?感谢。
答案 0 :(得分:4)
settings.edit()创建一个新编辑器。 commit()在不同的编辑器上完成,然后是clear()。你需要:
SharedPreferences.Editor editor = settings.edit();
editor.clear();
editor.commit();
答案 1 :(得分:4)
您在这里遇到的问题是代码:
SharedPreferences settings = this.getSharedPreferences(PREFS_NAME,1);
settings.edit().clear();
settings.edit().commit();
您正在创建两个编辑器。一个设置为清除,但你永远不会提交它,所以它不清楚。另一个提交,但你永远不会把它做任何事情。
SharedPreferences settings = this.getSharedPreferences(PREFS_NAME,1);
settings.edit().clear().commit();
这将创建一个编辑器,将其设置为清除,然后提交更改。我非常确保在您返回时值将被清除。我真的不知道,所以请发布结果,我会编辑这个答案。
答案 2 :(得分:3)
试试这个:
SharedPreferences.Editor editor = settings.edit();
editor.clear();
editor.commit();
感谢。
答案 3 :(得分:0)
恢复第一项活动时,不会刷新settings
。因此它没有读入新值。