【发布时间】:2011-12-23 11:07:36
【问题描述】:
如何从 SharedPreferences 中删除一些键/值对?我已经把它从首选项中删除了。
【问题讨论】:
如何从 SharedPreferences 中删除一些键/值对?我已经把它从首选项中删除了。
【问题讨论】:
SharedPreferences mySPrefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = mySPrefs.edit();
editor.remove(key);
editor.apply();
这里的编辑器是sharedPreferences编辑器。
【讨论】:
SharedPreferences.Editor.remove(key)
commit();
【讨论】:
请务必注意,除非您打算使用 commit() 调用的返回值做某事,否则绝对没有理由使用同步 commit() 调用而不是异步 apply() 调用.
请记住,如果您从主/UI 线程调用它,UI 将被阻塞,直到 commit() 完成。这可能需要大约 100 毫秒,而申请大约需要 5 毫秒。这可能看起来不多,但如果在整个应用程序中不断进行,它肯定会加起来。
所以,除非你打算做这样的事情,否则希望在一个单独的线程上:
editor.remove(String key);
boolean success = editor.commit();
if (!success) {
// do something
}
你应该这样做:
editor.remove(String key);
editor.apply();
【讨论】:
信息
只需检查 sharedpref 类扩展为 Map 这就是为什么有 remove 方法
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.remove(String key);
editor.apply();
这里的 editor 是 sharedPreferences 编辑器。
【讨论】:
这是我解决这个问题的方法。
首先我创建了一个 SharedPreference 的实例
SharedPreferences mobilePreference;
然后我将这个 sharedPreference 用作
mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);
这里的“in.bhartisoftwares.amit.allamitappsthree”是我的包名,我正在使用 Context.MODE_PRIVATE,因为我只想为这个包名操作这个共享首选项。
然后我删除选中的sharedPreference(我的sharedPreference的key是mobileString)如下:
mobilePreference.edit().remove("mobileString").commit();
完整代码如下:
SharedPreferences mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);
mobilePreference.edit().remove("mobileString").commit();
【讨论】:
很简单:
private SharedPreferences sharedPreferences() {
return PreferenceManager.getDefaultSharedPreferences(mContext);
}
public void clearSharedPreferences() {
sharedPreferences()
.edit()
.remove(SOME_KEY_1)
.remove(SOME_KEY_2)
.remove(SOME_KEY_3)
.apply();
}
【讨论】: