Come rimuovere alcune coppie chiave / valore da SharedPreferences?


90

Come rimuovere alcune coppie chiave / valore da SharedPreferences? L'ho messo e lo rimuovo dalle preferenze.

Risposte:


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

Qui l'editor è l'editor sharedPreferences.


11
Una piccola aggiunta a questa risposta. Dalla documentazione di Android: "Se non ti interessa il valore restituito e lo stai utilizzando dal thread principale della tua applicazione, considera invece di utilizzare apply ()."
Sreedevi J

3
@silwar, perché hai modificato di nuovo apply () in commit ()? sapendo che la documentazione dice di usare apply () a meno che non vogliamo lavorare con il valore di ritorno, e né la domanda né la risposta si adattano a quel caso
Salim Mahboubi

13

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

Ho cercato dappertutto una buona spiegazione (nel mondo reale) di quando utilizzare commit e applicare. Questo guida chiaramente il punto.
XMAN

9
SharedPreferences.Editor.remove(key) 
commit();

1
Se non usi il valore restituito dal metodo remove e lo stai usando dal thread principale della tua applicazione, considera invece di usare apply ().
kartik srivastava

9

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

3

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

1

Informazione

Basta controllare che la sharedprefclasse sia estesa a Mapquesto perché esiste il removemetodo

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

Qui l'editor è l'editor sharedPreferences.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.