如何从SharedPreferences中删除某些键/值对?

109

如何从SharedPreferences中删除某些键值对?我已经使用put添加了键值对,现在需要将其从prefs中删除。

6个回答

248
SharedPreferences mySPrefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = mySPrefs.edit();
editor.remove(key);
editor.apply();

这里的editor是sharedPreferences的编辑器。


12
这个回答需要增加一点内容。根据安卓文档,“如果你不关心返回值,并且在应用的主线程中使用该方法,请考虑使用apply()代替。” - Sreedevi J
3
@silwar,为什么你把apply()重新编辑成commit()?明知道文档中建议使用apply(),除非我们想要使用返回值,而且问题和答案都不符合这种情况。 - Salim Mahboubi

13

需要注意的是,除非您打算对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();

我一直在寻找一个好的(现实世界中的)解释,说明何时使用commit和apply。这可以清楚地阐明问题。 - XMAN

10

非常简单:

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

9
SharedPreferences.Editor.remove(key) 
commit();

1
如果您不使用remove方法的返回值,并且您正在从应用程序的主线程中使用它,请考虑改用apply()。 - kartik srivastava

3
这里是我解决这个问题的步骤。
首先,我创建了一个SharedPreference实例:
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();

1

信息

只需检查sharedpref类是否扩展为Map,因此有remove方法。

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.remove(String key);
editor.apply();

这里的 editor 是 sharedPreferences 的编辑器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接