Jak usunąć parę klucz / wartość z SharedPreferences?


Odpowiedzi:


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

Tutaj edytorem jest edytor SharedPreferences.


11
Mały dodatek do tej odpowiedzi. Z dokumentacji systemu Android: „Jeśli nie zależy Ci na wartości zwracanej i używasz jej z głównego wątku aplikacji, rozważ zamiast tego użycie apply ()”.
Sreedevi J

3
@silwar, dlaczego ponownie zmienisz metodę apply () z powrotem na zatwierdzenie ()? wiedząc, że dokumentacja mówi, aby użyć apply (), chyba że chcemy pracować z wartością zwracaną i ani pytanie, ani odpowiedź nie pasują do tego przypadku
Salim Mahboubi

13

Należy zauważyć, że o ile nie planujesz zrobić czegoś z wartością zwracaną przez wywołanie commit (), nie ma absolutnie żadnego powodu, aby używać synchronicznego wywołania commit () zamiast asynchronicznego wywołania apply ().

Pamiętaj, że jeśli wywołujesz to z głównego wątku / UI, interfejs użytkownika jest blokowany do czasu zakończenia commit (). Może to zająć około 100 ms, w porównaniu do około 5 ms. Może się wydawać, że to niewiele, ale jeśli będzie się to odbywać nieustannie w całej aplikacji, z pewnością będzie się sumować.

Tak więc, jeśli nie planujesz zrobić czegoś takiego, miejmy nadzieję, że w osobnym wątku:

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

Zamiast tego powinieneś to zrobić:

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

Wszędzie szukałem dobrego (rzeczywistego) wyjaśnienia, kiedy używać zatwierdzenia, a kiedy zastosuj. To wyraźnie nakierowuje punkt.
XMAN,


9

To jest bardzo proste:

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

Oto jak rozwiązałem ten problem.

Najpierw utworzyłem wystąpienie SharedPreference as

SharedPreferences mobilePreference;

następnie użyłem tego sharedPreference jako

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

Tutaj „in.bhartisoftwares.amit.allamitappsthree” to nazwa mojego pakietu i używam Context.MODE_PRIVATE, ponieważ chcę manipulować tą wspólną preferencją tylko dla tej nazwy pakietu.

Następnie usuwam wybrane sharedPreference (klucz do moich sharedPreference to mobileString) w następujący sposób:

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

Zobacz pełny kod poniżej:

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

1

Informacja

Po prostu sprawdź, czy sharedprefklasa jest rozszerzona Map, dlatego istnieje removemetoda

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

Tutaj edytorem jest edytor SharedPreferences.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.