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.

Damir
la source

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.

Yashwanth Kumar
la source
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();
SBerg413
la source
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();
Shailendra Singh Rajawat
la source
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();
}
Antônio Sérgio Ferraz
la source
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();
Amit Mhaske
la source
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.

Yogesh Rathi
la source