Preferencias en Android

Las preferencias en Android se gestionan mediante la clase SharedPreferences y su principal objetivo es guardar una configuración fija que se asignará a los controles que deseemos, por ejemplo, que cuando entremos en nuestra aplicación lo que hemos escrito en unos campos EditText se mantenga.

Para ello nuestra información se guarda en archivos XML con estructura de clave valor. Por ejemplo, para guardar un email nuestra clave podría ser "email" y el valor "jorge23@gmail.com". El modo de acceso tiene 3 posibilidades principales:
  • MODE_PRIVATE. Sólo nuestra aplicación tiene acceso a estas preferencias.
  • MODE_WORLD_READABLE. Todas las aplicaciones pueden leer estas preferencias, pero sólo la nuestra puede modificarlas.
  • MODE_WORLD_WRITABLE. Todas las aplicaciones pueden leer y modificar estas preferencias.
Las dos últimas son bastante peligrosas en cuanto a temas de seguridad concierne, por lo que a partir de la API 17 se consideran obsoletas (deprecated).

Para obtener una referencia se utiliza la siguiente sintaxis:

SharedPreferences prefs = getSharedPreferences("MisPreferencias",Context.MODE_PRIVATE);

Una vez hemos obtenido una referencia a nuestra colección de preferencias, ya podemos obtener, insertar o modificar preferencias utilizando los métodos get o put correspondientes al tipo de dato de cada preferencia. Así, por ejemplo, para obtener el valor de una preferencia llamada “email” de tipo String escribiríamos lo siguiente:

SharedPreferences prefs = getSharedPreferences("MisPreferencias",Context.MODE_PRIVATE);
String correo = prefs.getString("email", "por_defecto@email.com")

Como vemos, al método getString() le pasamos el nombre de la preferencia que queremos recuperar y un segundo parámetro con un valor por defecto. Este valor por defecto será el devuelto por el método getString() si la preferencia solicitada no existe en la colección. Además del método getString(), existen por supuesto métodos análogos para el resto de tipos de datos básicos, por ejemplo getInt(), getLong(), getFloat(), getBoolean(), …
Para actualizar o insertar nuevas preferencias el proceso será igual de sencillo, con la única diferencia de que la actualización o inserción no la haremos directamente sobre el objeto SharedPreferences, sino sobre su objeto de edición SharedPreferences.Editor. A este último objeto accedemos mediante el método edit() de la clase SharedPreferences. Una vez obtenida la referencia al editor, utilizaremos los métodos put correspondientes al tipo de datos de cada preferencia para actualizar/insertar su valor, por ejemplo putString(clave, valor), para actualizar una preferencia de tipo String. De forma análoga a los métodos get que ya hemos visto, tendremos disponibles métodos put para todos los tipos de datos básicos: putInt(), putFloat(), putBoolean(), etc. Finalmente, una vez actualizados/insertados todos los datos necesarios llamaremos al método commit() para confirmar los cambios. Veamos un ejemplo sencillo: 
___
SharedPreferences prefs = getSharedPreferences("MisPreferencias",Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = prefs.edit();
editor.putString("email", "modificado@email.com");
editor.putString("nombre", "Prueba");
editor.commit();

____
.:: Actividad ::.
Vamos a crear un formulario en el que crearemos 2 campos de texto. En el primero guardaremos el nombre de la persona y en el segundo el email. Debajo colocaremos un botón para guardar las preferencias, cuando lo pulsemos estas se guardarán (obtenemos el valor (lo que hemos escrito) con nombreDelEditText.getText() ). Cuando cerremos la aplicación y la volvamos a abrir, estas se cargarán en sus respectivos campos con lo que hemos escrito previamente (es decir, nombreDelEditText.setText(editor.getString....).
ATENCIÓN -> Cerrar la aplicación dándole al botón atrás en el emulador (la flecha de retroceso), si le dais a iniciar la actividad en el eclipse no funcionará ya que cada vez que hacemos esto el emulador reinstala la aplicación.
EXTRA -> Para los mas avanzados, cuando lo tengáis, podéis probar a insertar tipos diferentes de campos, por ejemplo, un Spinner con la comunidad a la que pertenece y que guarde la posición seleccionada al iniciar la aplicación o un CheckBox y se guarde su estado (chequeado o no chequeado).
 
 

No hay comentarios:

Publicar un comentario