Comment supprimer une paire clé / valeur de SharedPreferences?


90

Comment supprimer une paire clé / valeur de SharedPreferences? J'ai mis et je supprime cela de prefs.

Réponses:


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

Ici, l'éditeur est l'éditeur sharedPreferences.


11
Un petit ajout à cette réponse. De la documentation Android: "Si vous ne vous souciez pas de la valeur de retour et que vous l'utilisez à partir du thread principal de votre application, envisagez d'utiliser apply () à la place."
Sreedevi J

3
@silwar, pourquoi avez-vous réédité le apply () en un commit ()? sachant que la documentation dit d'utiliser apply () sauf si nous voulons travailler avec la valeur de retour, et ni la question ni la réponse ne rentrent dans ce cas
Salim Mahboubi

13

Il est important de noter qu'à moins que vous ne prévoyiez de faire quelque chose avec la valeur de retour de l'appel commit (), il n'y a absolument aucune raison d'utiliser l'appel synchrone commit () au lieu de l'appel asynchrone apply ().

Gardez à l'esprit que si vous appelez cela à partir du thread principal / UI, l'interface utilisateur est bloquée jusqu'à ce que la validation () soit terminée. Cela peut prendre jusqu'à environ 100 ms, à environ 5 ms pour l'application. Cela peut ne pas sembler beaucoup, mais si cela est fait continuellement tout au long d'une application, cela s'additionnera certainement.

Donc, à moins que vous ne prévoyiez de faire quelque chose comme ça, espérons-le sur un fil séparé:

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

Vous devriez plutôt faire ceci:

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

J'ai cherché partout une bonne explication (du monde réel) du moment où utiliser commit vs apply. Cela fait clairement passer le point.
XMAN

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

1
Si vous n'utilisez pas la valeur de retour de la méthode remove et que vous l'utilisez à partir du thread principal de votre application, envisagez plutôt d'utiliser apply ().
kartik srivastava

9

C'est très simple:

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

Voici comment j'ai abordé ce problème.

J'ai d'abord créé une instance de SharedPreference en tant que

SharedPreferences mobilePreference;

puis j'ai utilisé cette préférence partagée comme

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

Ici "in.bhartisoftwares.amit.allamitappsthree" est le nom de mon package et j'utilise Context.MODE_PRIVATE, car je souhaite manipuler cette préférence partagée uniquement pour ce nom de package.

Ensuite, je supprime la sharedPreference sélectionnée (la clé de ma sharedPreference est mobileString) comme suit:

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

Voir le code comme complet ci-dessous:

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

1

Information

Vérifiez simplement que la sharedprefclasse est étendue à Mapc'est pourquoi il existe une removeméthode

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

Ici, l'éditeur est l'éditeur sharedPreferences.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.