如何从SharedPreferences中删除某些键值对?我已经使用put添加了键值对,现在需要将其从prefs中删除。
如何从SharedPreferences中删除某些键值对?我已经使用put添加了键值对,现在需要将其从prefs中删除。
SharedPreferences mySPrefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = mySPrefs.edit();
editor.remove(key);
editor.apply();
这里的editor是sharedPreferences的编辑器。
需要注意的是,除非您打算对commit()调用的返回值执行某些操作,否则绝对没有理由使用同步的commit()调用而不是异步的apply()调用。
请记住,如果您从主/UI线程调用此函数,则UI将一直被阻塞,直到commit()完成。这可能需要超过100ms的时间,相比之下,apply大约需要5ms。这看起来可能不是很多,但如果在整个应用程序中频繁执行此操作,它肯定会累积。
因此,除非您计划执行类似以下操作(希望在单独的线程上运行):
editor.remove(String key);
boolean success = editor.commit();
if (!success) {
// do something
}
你应该做这个:
editor.remove(String key);
editor.apply();
非常简单:
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();
}
SharedPreferences.Editor.remove(key)
commit();
SharedPreferences mobilePreference;
然后我将这个sharedPreference用作
mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);
这里的 "in.bhartisoftwares.amit.allamitappsthree" 是我的包名,我使用 Context.MODE_PRIVATE,因为我只想为此包名操纵此共享首选项。
然后,我按以下方式删除所选的 sharedPreference(我的 sharedPreference 的键是 mobileString):
mobilePreference.edit().remove("mobileString").commit();
SharedPreferences mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);
mobilePreference.edit().remove("mobileString").commit();
信息
只需检查sharedpref
类是否扩展为Map
,因此有remove
方法。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.remove(String key);
editor.apply();