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.

Antworten:


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

Hier ist der Editor der sharedPreferences-Editor.


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

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

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

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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.