如何从SharedPreferences中删除包含字符串的某些键?

时间:2017-08-10 17:54:21

标签: android key sharedpreferences

我的Android SharedPreferences是:

键,值

JHON,USA

xxxpeter,UK

路易斯,MEX

xxxangel,ITAL

杜邦,呋喃

xxxcharles,次季

...

xxxname

更多行

...

如何在密钥中删除包含(或启动)xxx的键/值。这是我到目前为止所得到的:

public void Deletekeyxxx() {
    final SharedPreferences.Editor sped = sharedPreferences.edit();     
    if(sped.contains("xxx")){
      sped.remove(sped.contains("xxx"));
    }
    sped.commit();
 }

作品!谢谢Ben P。

public void Deletekeyxxx() { 
    final SharedPreferences.Editor sharedPrefsEditor = sharedPreferences.edit();

    Map<String, ?> allEntries = sharedPreferences.getAll();
    for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
        String key = entry.getKey();
        if (key.contains("xxx")) {
           sharedPrefsEditor.remove(key);
        }
      sharedPrefsEditor.commit();
    }
}

3 个答案:

答案 0 :(得分:1)

您可以使用以下行直接删除键值,无需进行字符串检查

..

答案 1 :(得分:1)

您可以使用sharedPreferences.getAll()获取共享首选项上的所有键/值引用,然后遍历它们并删除您想要的那些。

SharedPreferences.Editor editor = sharedPreferences.edit();
Map<String, ?> allEntries = sharedPreferences.getAll();
for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
    String key = entry.getKey();
    if (key.contains("xxx")) {
        editor.remove(key);
    }
    editor.commit();
} 

答案 2 :(得分:0)

您可以使用SharedPreferences.getAll()检索Map<String,?>,然后使用Map.keySet()迭代密钥。也许是这样的:

private void removeBadKeys() {
    SharedPreferences preferences = getSharedPreferences("Mypref", 0);
    SharedPreferences.Editor editor = preferences.edit();

    for (String key : preferences.getAll().keySet()) {
        if (key.startsWith("xxx")) {
            editor.remove(key);
        }
    }

    editor.commit();
}