摆脱偏好

时间:2011-03-09 08:13:08

标签: android sharedpreferences

有没有办法彻底摆脱偏好?似乎clear()和remove(key)并没有完全消除偏好。如果调用clear()然后调用SharedPreferences.contains(“key”),则返回true。

请注意,我也提交()clear()。

2 个答案:

答案 0 :(得分:1)

以下是clear()实施的方式:

public Editor clear() {
    synchronized (this) {
        mClear = true;
        return this;
    }
}

public boolean commit() {
    //...    
    synchronized (this) {
      if (mClear) {
        mMap.clear();
        mClear = false;
      }
    }
    //...
}

以下是contains(String key)实施的方式:

 public boolean contains(String key) {
   synchronized (this) {
     return mMap.containsKey(key);
   }
 }

您可以自己查看代码here。 (请注意,清除所有首选项时不会调用首选项更改侦听器。)

这个实现看起来很好,很可能是你的代码有问题。 这是我的简短示例应用程序,它验证clear()是否正常工作。

public class TestPrefClear extends Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 

        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
        prefs.edit().putBoolean("TEST", true).commit();
        if(!prefs.contains("TEST")){
            throw new IllegalStateException();
        }
        prefs.edit().clear().commit();
        if(prefs.contains("TEST")){
            throw new IllegalStateException();
        }       
    }
}

答案 1 :(得分:0)

clear()含糊不清,首先清除首选项,然后使用修改后的preference. replace()重新初始化可以满足您的需求,只需将空地图传递给它。