Come rimuovere alcune coppie chiave / valore da SharedPreferences? L'ho messo e lo rimuovo dalle preferenze.
Risposte:
SharedPreferences mySPrefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = mySPrefs.edit();
editor.remove(key);
editor.apply();
Qui l'editor è l'editor sharedPreferences.
È importante notare che, a meno che tu non stia pianificando di fare qualcosa con il valore di ritorno della chiamata commit (), non c'è assolutamente alcun motivo per usare la chiamata sincrona commit () invece della chiamata asincrona apply ().
Tieni presente che se lo stai chiamando dal thread principale / UI, l'interfaccia utente viene bloccata fino al completamento di commit (). Questo può richiedere fino a circa 100 ms rispetto a circa 5 ms per l'applicazione. Potrebbe non sembrare molto, ma se fatto continuamente durante un'applicazione, si sommerà sicuramente.
Quindi, a meno che tu non abbia intenzione di fare qualcosa di simile, si spera su un thread separato:
editor.remove(String key);
boolean success = editor.commit();
if (!success) {
// do something
}
Dovresti invece fare questo:
editor.remove(String key);
editor.apply();
SharedPreferences.Editor.remove(key)
commit();
È molto semplice:
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();
}
Ecco come ho affrontato questo problema.
Per prima cosa ho creato un'istanza di SharedPreference come
SharedPreferences mobilePreference;
quindi ho usato questo sharedPreference come
mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);
Qui "in.bhartisoftwares.amit.allamitappsthree" è il nome del mio pacchetto e sto usando Context.MODE_PRIVATE, perché voglio manipolare questa preferenza condivisa solo per questo nome di pacchetto.
Quindi elimino il sharedPreference selezionato (la chiave del mio sharedPreference è mobileString) come segue:
mobilePreference.edit().remove("mobileString").commit();
Vedi il codice completo di seguito:
SharedPreferences mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);
mobilePreference.edit().remove("mobileString").commit();
Informazione
Basta controllare che la sharedpref
classe sia estesa a Map
questo perché esiste il remove
metodo
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.remove(String key);
editor.apply();
Qui l'editor è l'editor sharedPreferences.