Cómo eliminar datos de preferencias compartidas de la aplicación en Android

478

¿Cómo elimino los datos de SharedPreferences para mi aplicación?

Estoy creando una aplicación que utiliza muchos servicios web para sincronizar datos. Para fines de prueba, necesito borrar algunos valores de SharedPreferences cuando reinicio la aplicación.

Andrés
fuente

Respuestas:

871

Para eliminar valores específicos: SharedPreferences.Editor.remove () seguido de uncommit()

Para eliminarlos todos SharedPreferences.Editor.clear()seguidos de uncommit()

Si no le importa el valor de retorno y lo está usando desde el hilo principal de su aplicación, considere usarlo en su apply()lugar.

Mark B
fuente
268
context.getSharedPreferences ("YOUR_PREFS", 0) .edit (). clear (). commit (); // elimina todas tus preferencias :)
rubdottocom
2
@yoshi definitivamente hay un remove () y un clear (). Utiliza remove () para eliminar preferencias específicas, usa clear () para eliminarlas todas. La pregunta original no estaba clara si necesitaban eliminarlos todos o no.
Mark B
99
Borrar el archivo de preferencias no parece eliminarlo realmente. En mis propias pruebas observando el uso de "Datos" que aparece en el panel Información de la aplicación, la creación de un nuevo archivo SharedPreference agrega 4KB a este valor, pero el uso de editor.clear (). Commit () no reduce el número.
Code Commander el
2
@rubdottocom ¿Por qué no pones tu comentario como una respuesta separada?
technophyle
10
@rubdottocom mejor usando .apply () en lugar de .commit ()
Juan Aguilar Guisado
173

Mi solución:

SharedPreferences preferences = getSharedPreferences("Mypref", 0);
preferences.edit().remove("text").commit();
vaibhav vijay
fuente
2
¿Eso elimina solo la variable TEXTO?
Si8
3
@ SiKni8 Sí, eso elimina solo el par clave / valor con clave "text".
Dennis
Pude hacerlo funcionar porque ha pasado un tiempo, pero gracias por la respuesta :)
Si8
Salvaste mi cordura absoluta. : P GRACIAS. Estaba tratando de borrar las preferencias para un elemento de un objeto a la vez, y esto funciona de maravilla.
Azurespot
3
Considere usar apply () en lugar de commit () para realizar la tarea en un hilo de fondo.
Zon
124

Eliminar todas las preferencias:

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

Eliminar preferencia única:

SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().remove("KeyName").commit();
zserghei
fuente
1
¿Cuál será el KeyName?
hasnain_ahmad
2
¿Cómo eliminar todo el archivo de preferencias, no solo las preferencias dentro del archivo?
Srikar Reddy
Use apply () en lugar de commit () para realizar la tarea en un hilo de fondo. commit () bloquea y escribe datos en el almacenamiento instantáneamente. apply () es asíncrono.
Vaibhav
64

Si no es necesario eliminarlo cada vez, puede eliminarlo manualmente desde:

Configuración -> Aplicaciones -> Administrar aplicaciones -> (elija su aplicación) -> Borrar datos o Desinstalar

Nuevas versiones de Android:

Configuración -> Aplicaciones -> (elija su aplicación) -> Almacenamiento -> Borrar datos y Borrar caché

Nobu
fuente
55
¿Podemos hacer esto mediante programación?
Amistad
@amity La otra respuesta lo hace programáticamente.
Doomsknight
31
Gracias por una opción no programática.
CorayThan
2
@amity - Algunos de nosotros necesitamos esta respuesta. No estaba seguro de cómo eliminar SharedPrefs en un emulador de Android para poder continuar probando mi código.
TJ Biddle
1
No existe en Android Studio 2.2.2 18/10/2016.
Robin como el pájaro
26

Eliminar las preferencias compartidas de Android en una línea :-)

context.getSharedPreferences("YOUR_PREFS", 0).edit().clear().commit();

O applypara una operación asincrónica sin bloqueo:

this.getSharedPreferences("YOUR_PREFS", 0).edit().clear().apply();
rubdottocom
fuente
La mejor solución para mi. Hay pocos casos en los que es necesario sincronizar el contenido de preferencias compartidas.
Juan Aguilar Guisado
19

Parece que toda la solución no funciona por completo o está muerta

para borrar todas las preferencias compartidas en una actividad

PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().clear().apply();

Llame a esto desde la actividad principal después de onCreate

nota * que usé en .apply()lugar de .commit(), eres libre de elegir commit ();

Shady Keshk
fuente
exactamente lo que quiero Gracias, borra todas las preferencias predeterminadas
Arpit Patel
11

Puede usar el shell adb para hacer esto incluso sin un teléfono rooteado. El único inconveniente es que la aplicación debe ser depurable.

run-as <your package name> <command>

Por ejemplo:

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

Alternativamente, puede hacer lo anterior pero sin el comando que lo dirigirá a la raíz del paquete de la aplicación y le permitirá ejecutar más comandos en el contexto de la aplicación.

Johnson Wong
fuente
1
+1 para el consejo útil run-as. Uno pensaría que habría encontrado esto después de 3 años ...
Richard Le Mesurier
Esta no es la Sharedpreferences, es la base de datos sqlite
OneCricketeer
10
Editor editor = getSharedPreferences("clear_cache", Context.MODE_PRIVATE).edit();
editor.clear();
editor.commit();
Vaishali Sutariya
fuente
9

A partir de API 24 (Turrón), solo puede hacer:

context.deleteSharedPreferences("YOUR_PREFS");

Sin embargo, no hay compatibilidad con versiones anteriores, por lo que si admite menos de 24, siga con:

context.getSharedPreferences("YOUR_PREFS", Context.MODE_PRIVATE).edit().clear().apply(); 
Afathman
fuente
9

Despejarlos a todos:

PreferenceManager.getDefaultSharedPreferences(context).edit().clear().apply()
Dan Alboteanu
fuente
8

También puede desinstalar manualmente su aplicación usando su dispositivo. Luego, cuando reinstalas tu aplicación, las preferencias compartidas se restablecen.

wizurd
fuente
Gracias. No quería eliminar mediante programación sharedPreferences, así que esto funcionó para mí.
Simon
En mi dispositivo tengo la opción de "borrar datos" en la opción de desinstalación, que funcionó para mí y eliminó la necesidad de reinstalar mi aplicación.
G O'Rilla
8

En las definiciones de clase:

private static final String PREFERENCES = "shared_prefs";

private static final SharedPreferences sharedPreferences  = getApplicationContext().getSharedPreferences(PREFERENCES, MODE_PRIVATE);

Dentro de la clase:

public static void deleteAllSharedPrefs(){
    sharedPreferences.edit().clear().commit();
}
sivi
fuente
7

Prueba este código:

SharedPreferences sharedPreferences = getSharedPreferences("fake", Context.MODE_PRIVATE);
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.clear().commit();
Mubashshir
fuente
5

Si es para su prueba. Puedes usar los comandos adb.

adb shell pm clear <package name>
Prakash
fuente
5
String prefTag = "someTag";
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext);
prefs.edit().remove(prefTag).commit();

Esto eliminará las preferencias compartidas guardadas con el nombre "someTag".

Kiran kg
fuente
3
  • Para eliminar un valor particular,

SharedPreferences.Editor remove (String key) seguido de commit () o apply ()

  • Para eliminar todos los valores,

    SharedPreferences.Editor clear () seguido de commit () o apply ()

Palak Jain
fuente
3

Para eliminar los pares de valores clave de la preferencia, puede hacer fácilmente lo siguiente

getActivity().getSharedPreference().editor().remove("key").apply();

También he desarrollado una biblioteca para manipular fácilmente las preferencias compartidas. Puede encontrar el siguiente enlace

https://github.com/farruhha/SimplePrefs

Farruh Habibullaev
fuente
2

Para borrar todas las preferencias compartidas centralmente de cualquier clase:

public static SharedPreferences.Editor getEditor(Context context) {
    return getPreferences(context).edit();
}

Y luego de cualquier clase: (commit devuelve un Boolean donde puede verificar si sus Preferencias se borraron o no)

Navigation.getEditor(this).clear().commit();

O puede usar aplicar; vuelve vacío

Navigation.getEditor(this).clear().apply();
Sufiyan Ansari
fuente
1
new File(context.getFilesDir(), fileName).delete();

Puedo eliminar el archivo en las preferencias compartidas con él

Dũng Phạm Tiến
fuente
Todas las soluciones anteriores son incorrectas, solo eliminar el archivo es el correcto para eliminar las preferencias compartidas
Dreamer
1

Ninguna de las respuestas funciona para mí, ya que tengo muchas claves de preferencias compartidas.

Digamos que está ejecutando una prueba de Android en lugar de una prueba unitaria.

Me está funcionando en bucle y eliminar a través de todos los archivos shared_prefs .

@BeforeClass se ejecutará antes de todas las pruebas y ActivityTestRule

@BeforeClass
public static void setUp() {
    Context context = InstrumentationRegistry.getTargetContext();

    File root = context.getFilesDir().getParentFile();
    String[] sharedPreferencesFileNames = new File(root, "shared_prefs").list();
    for (String fileName : sharedPreferencesFileNames) {
        context.getSharedPreferences(fileName.replace(".xml", ""), Context.MODE_PRIVATE).edit().clear().commit();
    }
}
Allen
fuente
0

La forma Kotlin ktx de borrar todas las preferencias:

val prefs: SharedPreferences = getSharedPreferences("prefsName", Context.MODE_PRIVATE)
prefs.edit(commit = true) {
    clear()
}

Haga clic aquí para ver todas las operaciones de preferencias compartidas con ejemplos

Paritosh
fuente
-2

Puede usar preferences.edit().remove("key").commit()para eliminar los valores guardados de las preferencias compartidas.

Ashish Jaiswal
fuente
-6

Acabo de hacer esto esta mañana. Desde un símbolo del sistema:

adb shell
cd /data/data/YOUR_PACKAGE_NAME/shared_prefs
rm * // to remove all shared preference files
rm YOUR_PREFS_NAME.xml // to remove a specific shared preference file

NOTA : Esto requiere un dispositivo rooteado, como los dispositivos virtuales Android existentes, un dispositivo Genymotion o un teléfono / tableta rooteado real, etc.

kdahlhaus
fuente
99
Entonces, quien rechazó esta solución también debería explicar por qué: ¡Necesita un teléfono rooteado para acceder /data/datadirectamente!
nuala
3
Debe quitar las preferencias compartidas de la aplicación y no el shell ADB. Se hace usando: SharedPreferences.edit (). Clear (). Commit ();
ThePunisher
Preguntado nunca dijo que querían una solución sin raíz. Sin embargo, hay un error técnico aquí; Debido a que este método requiere root, debe ejecutar sudespués adb shellpara abrir un shell privilegiado.
Anubian Noob
¿Por qué se rechazó tanto esto? Esta es una respuesta útil y la que estaba buscando.
Matt D