有没有办法彻底摆脱偏好?看起来clear()和remove(key)并没有完全摆脱偏好。如果你调用clear()然后调用SharedPreferences.contains(“key”),它将返回true。摆脱偏好
请注意,我也犯()clear()。
有没有办法彻底摆脱偏好?看起来clear()和remove(key)并没有完全摆脱偏好。如果你调用clear()然后调用SharedPreferences.contains(“key”),它将返回true。摆脱偏好
请注意,我也犯()clear()。
这里是如何实现的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();
}
}
}
如果我们能看到你的一些代码会更容易。通过调用清除,然后提交应该工作。这听起来像命令没有被调用。 – Phobos 2011-03-09 08:24:08
正在调用这些命令。问题是VALUE被清除,但我定义的属性/密钥仍然存在。 – locoboy 2011-03-09 17:40:04