592 votes

Comment supprimer les données de préférences partagées d'une application sous Android ?

Comment supprimer les données de SharedPreferences pour mon application ?

Je suis en train de créer une application qui utilise beaucoup de services web pour synchroniser les données. À des fins de test, je dois effacer certaines valeurs de SharedPreferences lorsque je redémarre l'application.

989voto

mbaird Points 31293

Pour supprimer des valeurs spécifiques : SharedPreferences.Editor.remove() suivi d'un commit()

Pour les supprimer tous SharedPreferences.Editor.clear() suivi d'un commit()

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.

290 votes

Context.getSharedPreferences("YOUR_PREFS", 0).edit().clear().commit() ; //supprimez toutes vos préférences :)

3 votes

@yoshi il y a bien un remove() ainsi qu'un clear(). Vous utilisez remove() pour supprimer des préférences spécifiques, vous utilisez clear() pour les supprimer toutes. La question originale n'était pas claire quant à savoir s'il fallait les supprimer toutes ou non.

11 votes

L'effacement du fichier de préférences ne semble pas le supprimer réellement. Dans mes propres tests, en observant l'utilisation des "données" listées dans le panneau d'informations de l'application, la création d'un nouveau fichier de préférences partagées ajoute 4 Ko à cette valeur, mais l'utilisation de editor.clear().commit() ne réduit pas ce nombre.

214voto

vaibhav vijay Points 417

Ma solution :

SharedPreferences preferences = getSharedPreferences("Mypref", 0);
preferences.edit().remove("text").commit();

2 votes

Est-ce que cela supprime la variable TEXT uniquement ?

3 votes

@SiKni8 Oui, cela supprime uniquement la paire clé/valeur avec clé "text" .

0 votes

J'ai réussi à le faire fonctionner car cela fait un moment mais merci pour la réponse :)

155voto

zserghei Points 311

Suppression de toutes les préférences :

SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().clear().commit();

Suppression de la préférence unique :

SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().remove("KeyName").commit();

1 votes

Quel sera le KeyName ?

4 votes

Comment supprimer l'ensemble du fichier de préférences, et pas seulement les préférences contenues dans le fichier ?

1 votes

Utilisez apply() au lieu de commit() pour effectuer la tâche dans un thread d'arrière-plan. commit() bloque et écrit les données dans le stockage instantanément. apply() est asynchrone.

78voto

Nobu Points 1800

S'il n'est pas nécessaire de le supprimer à chaque fois, vous pouvez le supprimer manuellement à partir de :

Paramètres -> Applications -> Gérer les applications -> (choisissez votre application) -> Effacer les données ou Désinstaller

Des versions plus récentes d'Android :

Paramètres -> Applications -> (choisissez votre application) -> Stockage -> Effacer les données et Effacer le cache

6 votes

Pouvons-nous faire ces choses de manière programmée.

1 votes

@amity L'autre réponse le fait de manière programmatique.

42 votes

Merci pour cette option non programmée.

11voto

Darkurio Points 377

Vous pouvez utiliser l'interpréteur de commandes adb pour le faire, même sans avoir un téléphone enraciné. Le seul problème est que l'application doit pouvoir être déboguée.

run-as <your package name> <command>

Par exemple :

run-as com.asdf.blah rm /data/data/com.asdf.blah/databases/myDB.db

Vous pouvez également faire ce qui précède, mais sans la commande, ce qui vous dirigera vers la racine du paquetage de l'application et vous permettra d'exécuter plus de commandes dans le contexte de l'application.

1 votes

+1 pour le conseil utile sur run-as . On pourrait penser que j'aurais trouvé ça après 3 ans...

0 votes

Ce n'est pas les préférences partagées, c'est la base de données sqlite

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X