Cómo comprobar si existe o no el archivo SharedPreferences
Estoy buscando una Android Preferencias compartidas y me pregunto si hay una manera de comprobar si el archivo de preferencias existe.
SharedPreferences mySharedPreferences ; mySharedPreferences=getSharedPreferences(“Name_of_your_preference”,mode);
Este código anterior me lleva a creer que "Name_of_Your_preferene" se almacena como un archivo o algún tipo de contenedor que contendrá sus preferencias.
- Android SharedPreferences Conjunto de cadenas: algunos elementos se quitan después de reiniciar la aplicación
- SharedPreferences problemas con la cadena "ISO-8859-1"?
- Modo seguro para cifrar / descifrar la preferencia compartida en Android
- FindPreference devuelve NULL en el prefit nombre pref
- Cómo almacenar objeto de clase en android sharedPreference?
Me pregunto que hay lejos para comprobar si esto existe o no. Cuando un usuario carga una actividad, quiero guardar todas las configuraciones en este archivo con algunos valores predeterminados (desactivado para todos los ajustes). Sin embargo, sólo quiero hacer esto si van a la página por primera vez.
De lo contrario si yo haría algo como esto cada vez que la página se carga
SharedPreferences.Editor editor= mySharedPreferences.edit(); /* now store your primitive type values. In this case it is true, 1f and Hello! World */ editor.putBolean(“myBoolean”,true); editor.putFloat(“myFloat”,1f); editor.putString(“myString”,” Hello! World”);
Estoy adivinando que anularía todos los ajustes incluso los que establecen.
- Cómo guardar un paquete completo en SharedPreferences
- Ajuste el botón Visible en otro acticty con la configuración de Preferencias
- Puedo almacenar dos o más valores con la misma clave usando SharedPreferences en android?
- Artículos de preferencia e intenciones explícitas
- Cómo guardar la lista <Object> a SharedPreferences?
- Android: obtiene los elementos de la matriz de cadenas y muestra uno por uno en la vista de texto
- PreferenceFragment con la biblioteca de soporte
- Samsung y Android 2.2.1 compartido pref cuestión
Las SharedPreferences se guardan en un archivo xml. Puede encontrarlo en /data/data/your_application_package/shared_prefs/Name_of_your_preference.xml
Para comprobar si existe el Shared_Preferences 'Name_of_your_preference':
File f = new File( "/data/data/your_application_package/shared_prefs/Name_of_your_preference.xml"); if (f.exists()) Log.d("TAG", "SharedPreferences Name_of_your_preference : exist"); else Log.d("TAG", "Setup default preferences");
Saludos.
Puede utilizar el método contains
en el objeto SharedPreferences
para comprobar si una de sus claves de preferencia existe en el archivo. Si esto devuelve false
, puede suponer que es la primera vez y llenar los valores predeterminados. La documentación para este método está aquí .
No pude encontrar ninguna manera de comprobar si un archivo de preferencia ya existe (se creará automáticamente la primera vez que se recupera un editor), pero este método debe hacer el truco.
No tuve suficientes representantes para comentar el post de natur3. Por lo tanto, esta respuesta.
@ Natur3: Muy útil, gracias. Hade un pequeño problema sin embargo … con el sufijo del archivo. Si defino mi nombre de archivo como este:
private static final String FILENAME = "myPrefs";
Y luego usar:
File f = new File("/data/data/" + getPackageName() + "/shared_prefs/" + FILENAME);
F.exists () devolverá false aunque el archivo exista en el sistema de archivos. Esto se debe a que Android añadirá el sufijo ".xml" automáticamente al escribir SharedPreferences, así que tuve que hacer que mi referencia de archivo fuera así:
File f = new File("/data/data/" + getPackageName() + "/shared_prefs/" + FILENAME + ".xml");
Para que funcione. No sé de dónde obtuvo su sufijo "_preferences.xml".
Me las arreglé para averiguarlo explorando el sistema de archivos del emulador en Eclipse usando Window-> Show View-> Other … y luego seleccionando "File Explorer".
Lo hice de esta manera por lo que su imo adaptable.
File f = new File("/data/data/" + getPackageName() + "/shared_prefs/" + getPackageName()+ "_preferences.xml"); if(f.exists()) { //do stuff`enter code here` }
He utilizado esto en un proceso de validación en el onCreate si las preferencias existen o no y dependiendo de la respuesta habilitar un botón para borrar las preferencias o no – sólo verificar qué el nombre de su archivo de preferencia está en DDMS si no se nombra manualmente.
En lugar de codificar el "/ data / data /" camino que puede hacer esto:
public boolean preferenceFileExist(String fileName) { File f = new File(getApplicationContext().getApplicationInfo().dataDir + "/shared_prefs/" + fileName + ".xml"); return f.exists() }
La forma más fácil que he encontrado, podemos comprobar si la preferencia compartida existe por un código incorporado en android
sharePrefName.contains(String key) // as if (userData.contains("name")){Toast // Your data is already here!}
Comprueba si las preferencias contienen una preferencia. (Es el método público booleano abstracto)
Simple y fácil 🙂
- Cómo obtener el dispositivo UUID en marco iónico
- Las animaciones de salida de la actividad no funcionan como se esperaba en Android 4.0