Android 删除除一个SharedReference之外的所有引用

Android 删除除一个SharedReference之外的所有引用,android,sharedpreferences,Android,Sharedpreferences,我想清除除一个SharedReference之外的所有引用。如果我保存了10+,有没有更好的方法,然后逐个删除?这有点多余: preferences.edit().remove("1").commit(); preferences.edit().remove("2").commit(); preferences.edit().remove("3").commit(); ... preferences.edit().remove("15").commit(); 在提交()之前,可以多次调用rem

我想清除除一个SharedReference之外的所有引用。如果我保存了10+,有没有更好的方法,然后逐个删除?这有点多余:

preferences.edit().remove("1").commit();
preferences.edit().remove("2").commit();
preferences.edit().remove("3").commit();
...
preferences.edit().remove("15").commit();
在提交()之前,可以多次调用remove()


您还可以获取要保留的值,
clear()
,并在提交之前重新添加它。

您可以循环使用所有键

Map<String,?> prefs = pref.getAll();
for(Map.Entry<String,?> prefToReset : prefs.entrySet()){
    edit.remove(prefToReset.getKey()).commit();
}
Map prefs=pref.getAll();
对于(Map.Entry预存储集:prefs.entrySet()){
edit.remove(preforeset.getKey()).commit();
}

然后跳过您不想删除的键

您可以这样做->

private static void clearSp() {

    Map<String, ?> mapPref = sharedPrefObj.getAll();
    if (mapPref.containsKey("key_need_to_retain"))
        mapPref.remove("key_need_to_retain");

    for (Map.Entry<String, ?> prefToRemove: mapPref.entrySet())
        editor.remove(prefToRemove.getKey()).apply();

}
private static void clearSp(){
Map mapref=sharedPrefObj.getAll();
if(mapref.containsKey(“键需要保留”))
mapref.remove(“密钥需要保留”);
对于(Map.Entry prefToRemove:mapref.entrySet())
editor.remove(preforemove.getKey()).apply();
}

没错,但这不会减少行数。还有更优雅的吗?不错。我想这是最好的方式,我不得不恭敬地不同意关于这个解决方案的一点:
commit()
可能会很昂贵,而且你会执行n次。如果将该部分移到循环之外会更好。@matiash您可以始终使用
apply()
,它首先将其写入内存,然后开始异步提交到磁盘
private static void clearSp() {

    Map<String, ?> mapPref = sharedPrefObj.getAll();
    if (mapPref.containsKey("key_need_to_retain"))
        mapPref.remove("key_need_to_retain");

    for (Map.Entry<String, ?> prefToRemove: mapPref.entrySet())
        editor.remove(prefToRemove.getKey()).apply();

}