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

90

Jak usunąć parę klucz / wartość z SharedPreferences? Włożyłem i usunąłem to z prefs.

Damir
źródło

Odpowiedzi:

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

Tutaj edytorem jest edytor SharedPreferences.

Yashwanth Kumar
źródło
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();
SBerg413
źródło
Wszędzie szukałem dobrego (rzeczywistego) wyjaśnienia, kiedy używać zatwierdzenia, a kiedy zastosuj. To wyraźnie nakierowuje punkt.
XMAN,
9
SharedPreferences.Editor.remove(key) 
commit();
Shailendra Singh Rajawat
źródło
1
Jeśli nie używasz wartości zwracanej z metody remove i używasz jej z głównego wątku swojej aplikacji, zamiast tego rozważ użycie apply ().
kartik srivastava
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();
}
Antônio Sérgio Ferraz
źródło
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();
Amit Mhaske
źródło
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.

Yogesh Rathi
źródło