2011-11-07 13 views

Odpowiedz

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

Tutaj edytorem jest edytor sharedPreferences.

+9

Niewielki dodatek do tej odpowiedzi. Z dokumentacji Androida: "Jeśli nie zależy Ci na wartości zwracanej i używasz jej z głównego wątku aplikacji, zastanów się nad użyciem metody apply()". –

+1

@silwar, dlaczego ponownie przypisałeś metodę apply() z powrotem do commit()?wiedząc, że dokumentacja mówi, że należy zastosować apply(), chyba że chcemy pracować z wartością zwracaną, i żadne pytanie ani odpowiedź nie pasują do tego przypadku –

7
SharedPreferences.Editor.remove(key) 
commit(); 
10

Ważne jest, aby pamiętać, że jeśli nie planujesz robić coś z wartością powrotnej commit() połączenia, nie ma absolutnie żadnego powodu do stosowania synchroniczna commit() zadzwonić zamiast asynchronicznego aplikuj().

Należy pamiętać, że jeśli wywołujesz to z głównego wątku/interfejsu użytkownika, interfejs użytkownika jest blokowany do momentu zakończenia zatwierdzania(). Może to trwać do około 100 ms w stosunku do około 5 ms dla aplikacji. To może nie wydawać się dużo, ale jeśli jest wykonywane bez przerwy w aplikacji, to na pewno się zsumuje.

Więc, chyba że planujesz robić coś takiego, z nadzieją na osobnym wątku:

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

Należy zamiast tego robić:

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

Informacja

Po prostu sprawdź, czy klasa sharedpref została rozszerzona na Map, dlatego istnieje remove metoda

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

Tutaj edytorem jest edytor sharedPreferences.

2

Oto jak poradziłem sobie z tym problemem.

Najpierw stworzył instancję SharedPreference jak

SharedPreferences mobilePreference; 

następnie użyłem tego sharedPreference jako

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

Here "in.bhartisoftwares.amit.allamitappsthree" to moja nazwa pakietu i używam Context.MODE_PRIVATE, ponieważ chcę manipulować tą preferencją tylko dla tej nazwy pakietu.

to jestem usuwanie wybranego sharedPreference (element mojego sharedPreference jest mobileString) w następujący sposób:

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

Zobacz kod jako pełny poniżej:

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

To 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(); 
} 
Powiązane problemy