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


Answers:


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

这里的编辑器是sharedPreferences编辑器。


11
这个答案的一个小补充。在android文档中:“如果您不关心返回值,而您正在应用程序的主线程中使用它,则可以考虑使用apply()。”
Sreedevi J 2013年

3
@silwar,为什么还要将apply()重新编辑为commit()?知道文档说要使用apply(),除非我们想使用返回值,并且问题和答案都不适合这种情况
Salim Mahboubi 2015年

13

需要特别注意的是,除非您打算使用commit()调用的返回值来做某事,否则绝对没有理由使用同步commit()调用而不是异步apply()调用。

请记住,如果您是从main / UI线程调用此方法,则UI将被阻塞,直到commit()完成。这可能需要大约100毫秒以上的时间,大约需要5毫秒的时间。这看起来似乎不多,但是如果在整个应用程序中不断进行,那么它肯定会加起来。

因此,除非您打算做这样的事情,否则希望在单独的线程上进行:

editor.remove(String key); 
boolean success = editor.commit();
if (!success) { 
    // do something 
}

相反,您应该这样做:

editor.remove(String key); 
editor.apply();

我一直在寻找关于何时使用commit和apply的良好(现实世界)解释。这清楚地表明了这一点。
XMAN


9

很简单:

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

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

这里的编辑器是sharedPreferences编辑器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.