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.

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.


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

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

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é


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

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


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.


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

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

9

Despejarlos a todos:

PreferenceManager.getDefaultSharedPreferences(context).edit().clear().apply()

8

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


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

7

Prueba este código:

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

5

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

adb shell pm clear <package name>

5
String prefTag = "someTag";
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext);
prefs.edit().remove(prefTag).commit();

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


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


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


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

1
new File(context.getFilesDir(), fileName).delete();

Puedo eliminar el archivo en las preferencias compartidas con él


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

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


-2

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


-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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.