4

我想清除我在第一个活动中放置的所有 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;
        }
    }
}

和我的第二个活动:

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();
    }
}

一旦我按下后退按钮,我将返回主要活动并期望清除偏好值,除非我再次按下按钮。我尝试了 bot backpress 和 resume,但 sharedpref 值仍然存在。我错过了什么吗?谢谢。

4

4 回答 4

6

试试这个:

SharedPreferences.Editor editor = settings.edit();
editor.clear();
editor.commit();

谢谢。

于 2013-01-23T14:04:41.733 回答
5

您在这里面临的问题是代码:

   SharedPreferences settings = this.getSharedPreferences(PREFS_NAME,1);
   settings.edit().clear();
   settings.edit().commit();

您正在创建两个编辑器。一个设置为清除,但您从不提交它,因此它不清除。其他提交,但您从未将其设置为执行任何操作。

   SharedPreferences settings = this.getSharedPreferences(PREFS_NAME,1);
   settings.edit().clear().commit();

这将创建一个编辑器,将其设置为清除,然后提交更改。我确定当您返回时这些值将被清空。不过,我真的不知道,所以请发布结果,我会编辑这个答案。

于 2013-01-23T14:10:16.527 回答
4

settings.edit() 创建一个新的编辑器。commit() 是在不同的编辑器上完成的,然后是 clear()。你需要:

SharedPreferences.Editor editor = settings.edit();
editor.clear();
editor.commit();
于 2013-01-23T14:06:04.747 回答
0

settings当您恢复您的第一个活动时,您不会刷新。因此它没有读入新值。

于 2013-01-23T14:03:29.453 回答