Wie entferne ich ein Schlüssel / Wert-Paar aus SharedPreferences?

88

Wie entferne ich ein Schlüssel / Wert-Paar aus SharedPreferences? Ich habe gesetzt und ich das aus den Einstellungen zu entfernen.

Damir
quelle

Antworten:

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

Hier ist der Editor der sharedPreferences-Editor.

Yashwanth Kumar
quelle
11
Eine kleine Ergänzung zu dieser Antwort. Aus der Android-Dokumentation: "Wenn Sie sich nicht für den Rückgabewert interessieren und diesen aus dem Hauptthread Ihrer Anwendung verwenden, sollten Sie stattdessen apply () verwenden."
Sreedevi J
3
@silwar, warum hast du das apply () wieder auf ein commit () zurückgesetzt? zu wissen, dass in der Dokumentation die Verwendung von apply () angegeben ist, es sei denn, wir möchten mit dem Rückgabewert arbeiten, und weder die Frage noch die Antwort
passen
12

Es ist wichtig zu beachten, dass es absolut keinen Grund gibt, den synchronen Befehl commit () anstelle des Aufrufs asynchronly apply () zu verwenden, es sei denn, Sie planen, etwas mit dem Rückgabewert des Aufrufs commit () zu tun.

Beachten Sie, dass die Benutzeroberfläche blockiert wird, wenn Sie dies vom Haupt- / UI-Thread aus aufrufen, bis commit () abgeschlossen ist. Dies kann bis zu ca. 100 ms dauern, was ungefähr 5 ms für die Anwendung entspricht. Das scheint nicht viel zu sein, aber wenn es kontinuierlich während einer Anwendung durchgeführt wird, wird es sich sicherlich summieren.

Also, es sei denn, Sie planen so etwas, hoffentlich in einem separaten Thread:

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

Sie sollten stattdessen Folgendes tun:

editor.remove(String key); 
editor.apply();
SBerg413
quelle
Ich habe überall nach einer guten (realen) Erklärung gesucht, wann Commit vs Apply verwendet werden soll. Dies bringt den Punkt klar zum Ausdruck.
XMAN
9
SharedPreferences.Editor.remove(key) 
commit();
Shailendra Singh Rajawat
quelle
1
Wenn Sie den Rückgabewert der Methode remove nicht verwenden und diesen Wert aus dem Hauptthread Ihrer Anwendung verwenden, sollten Sie stattdessen apply () verwenden.
Kartik Srivastava
9

Es ist sehr einfach:

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();
}
Antônio Sérgio Ferraz
quelle
3

Hier ist, wie ich dieses Problem angegangen bin.

Zuerst habe ich eine Instanz von SharedPreference als erstellt

SharedPreferences mobilePreference;

dann habe ich diese sharedPreference als verwendet

mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);

Hier ist "in.bhartisoftwares.amit.allamitappsthree" mein Paketname und ich verwende Context.MODE_PRIVATE, da ich diese gemeinsame Einstellung nur für diesen Paketnamen bearbeiten möchte.

Dann lösche ich die ausgewählte sharedPreference (der Schlüssel meiner sharedPreference ist mobileString) wie folgt:

mobilePreference.edit().remove("mobileString").commit();

Sehen Sie den Code unten als vollständig an:

SharedPreferences mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);
    mobilePreference.edit().remove("mobileString").commit();
Amit Mhaske
quelle
1

Information

Überprüfen Sie einfach, ob die sharedprefKlasse erweitert ist Map, deshalb gibt es eine removeMethode

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

Hier ist der Editor der sharedPreferences-Editor.

Yogesh Rathi
quelle