25.10.2016 Views

Revista-virtual2.0

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

SharedPreferences<br />

public interface SharedPreferences<br />

android.content.SharedPreferences<br />

Interfaz para acceder y modificar los datos de preferencia devueltos por<br />

getSharedPreferences (String, int). Para cualquier conjunto particular de<br />

preferencias, hay una sola instancia de esta clase que todos los clientes<br />

comparten. Las modificaciones de las preferencias deben pasar por un objeto<br />

SharedPreferences.Editor para garantizar los valores de preferencia se<br />

mantienen en un estado coherente y control cuando se cometen al<br />

almacenamiento. Los objetos que se devuelven de los diversos métodos get<br />

deben ser tratados como inmutable por la aplicación.<br />

Las preferencias no son más que datos que una aplicación debe<br />

guardar para personalizar la experiencia del usuario, por ejemplo<br />

información personal, opciones de presentación, etc. En artículos<br />

anteriores vimos ya uno de los métodos disponibles en la plataforma<br />

Android para almacenar datos, como son las bases de datos SQLite.<br />

Las preferencias de una aplicación se podrían almacenar por su<br />

puesto utilizando este método, y no tendría nada de malo, pero<br />

Android proporciona otro método alternativo diseñado<br />

específicamente para administrar este tipo de datos: las preferencias<br />

compartidas o shared preferences. Cada preferencia se almacenará<br />

en forma de clave-valor, es decir, cada una de ellas estará compuesta<br />

por un identificador único (p.e. “email”) y un valor asociado a dicho<br />

identificador (p.e. “prueba@email.com”). Además, y a diferencia de<br />

SQLite, los datos no se guardan en un fichero binario de base de<br />

datos, sino en ficheros XML como veremos al final de este artículo.<br />

La API para el manejo de estas preferencias es muy sencilla. Toda la<br />

gestión se centraliza en la claseSharedPrefences, que representará a<br />

una colección de preferencias. Una aplicación Android puede<br />

gestionar varias colecciones de preferencias, que se diferenciarán<br />

mediante un identificador único. Para obtener una referencia a una<br />

colección determinada utilizaremos el<br />

método getSharedPrefences() al que pasaremos el identificador de<br />

la colección y un modo de acceso. El modo de acceso indicará qué<br />

aplicaciones tendrán acceso a la colección de preferencias y qué<br />

operaciones tendrán permitido realizar sobre ellas. Así, tendremos<br />

tres posibilidades principales:


MODE_PRIVATE. Sólo nuestra aplicación tiene acceso a estas<br />

preferencias.<br />

MODE_WORLD_READABLE. Todas las aplicaciones pueden leer<br />

estas preferencias, pero sólo la nuestra puede modificarlas.<br />

MODE_WORLD_WRITABLE. Todas las aplicaciones pueden leer y<br />

modificar estas preferencias.<br />

Las dos últimas opciones son relativamente “peligrosas” por lo que en condiciones<br />

normales no deberían usarse. De hecho, se han declarado como obsoletas en la API 17<br />

(Android 4.2).<br />

Nota: Esta clase no es compatible con el uso a través de múltiples procesos.<br />

Clases anidadas<br />

SharedPreferences.Editor<br />

Interface<br />

Interfaz utilizada para modificar los valores de un objeto SharedPreferences.<br />

SharedPreferences.OnSharedPreferenceChangeListener<br />

Interface<br />

Definición de interfaz para una devolución de llamada que se invoca cuando se<br />

cambia una preferencia compartida.<br />

Los métodos públicos<br />

Abstract boolean<br />

contains(String key)<br />

Comprueba si las preferencias contiene una preferencia.


Abstract<br />

SharedPreferences.Edi<br />

tor<br />

Edit ()<br />

Crear un nuevo editor para estas preferencias, a través del<br />

cual se pueden hacer modificaciones a los datos de las<br />

preferencias y atómicamente confirmar esos cambios de<br />

nuevo a los SharedPreferences objetar.<br />

Abstract Map<br />

GetAll ()<br />

Recuperar todos los valores de las preferencias.<br />

Abstract boolean<br />

GetBoolean (String key, boolean defValue)<br />

Recuperar un valor booleano de las preferencias.<br />

Abstract float<br />

GetFloat (String key, float defValue)<br />

Recuperar un valor flotante de las preferencias.<br />

Abstract int.<br />

GetInt (String key, int defValue)<br />

Recuperar un valor int de las preferencias.<br />

Abstract long<br />

GetLong (String key, long defValue)<br />

Recuperar un valor de tiempo de las preferencias.<br />

Abstract String<br />

GetString (String key, String defValue)<br />

Recuperar un valor de cadena de las preferencias.<br />

Abstract Set<br />

getStringSet(String key, Set defValues)<br />

Recuperar un conjunto de valores de cadena de las<br />

preferencias.


Abstract void<br />

RegisterOnSharedPreferenceChangeListener<br />

(SharedPreferences.OnSharedPreferenceChangeListenerli<br />

stener)<br />

Registra una devolución de llamada que se invoca cuando<br />

ocurre un cambio en la preferencia.<br />

Abstract void<br />

UnregisterOnSharedPreferenceChangeListener<br />

(SharedPreferences.OnSharedPreferenceChangeListenerli<br />

stener)<br />

Elimina el registro de una devolución de llamada anterior.<br />

SharedPreferences de Android<br />

para guardar datos persistentes<br />

¿Cuáles son SharedPreferences?<br />

SharedPreferences son pares de valores clave de los tipos de datos primitivos que se<br />

guardan en un archivo dentro de una estructura de archivos de aplicaciones. A<br />

continuación, puede acceder a este archivo desde cualquier lugar dentro de la aplicación<br />

ya sea para poner los datos en el archivo de datos o tomar fuera del archivo. No se puede<br />

acceder al archivo desde otra aplicación así que es bastante seguro desde ese punto de<br />

vista.<br />

En dónde se utilice SharedPreferences?<br />

Se podría, por ejemplo, utilizar SharedPreferences en un juego en el que se ahorraría el<br />

nombre del usuario, puntuación más alta, y el estado del juego cuando se cierra la<br />

sesión. A continuación, la próxima vez que inicien sesión, su puntuación y el nivel de juego<br />

se puede recuperar desde el archivo de preferencias y que seguiría el juego desde donde<br />

terminaron cuando se cierra la sesión.<br />

Guarde los datos en unos archivos individuales o<br />

múltiples SharedPreferences<br />

Puede guardar los datos de preferencias en un único archivo o en varios archivos,<br />

dependiendo de sus necesidades. El proceso es el mismo excepto por los<br />

SharedPreferences objeto que se obtiene.<br />

En el caso de un solo archivo, llame getPreferences () para obtener un objeto<br />

SharedPreferences y para múltiples archivos, llamar getSharedPreferences () y pasarle un<br />

nombre para el archivo como un parámetro.


getPreferences () - para las preferencias nivel de actividad. Cada actividad tendrá<br />

su propio archivo de preferencias<br />

getSharedPreferences () - para las preferencias de nivel de aplicación. Se puede<br />

acceder al archivo de preferencias desde cualquier parte de la aplicación<br />

Recuperando los datos<br />

Una vez que tenga los SharedPreferences objeto, se puede utilizar un número de get<br />

métodos para recuperar los valores.<br />

Guardar los datos<br />

Aseguramiento de los datos es bastante simple también. Sólo tiene que utilizar la clase<br />

SharedPreferences.Editor para obtener un objeto Editor llamando edición () en las<br />

SharedPreferences pertinentes objeto. A continuación, utilice la opción de venta <br />

métodos para guardar los datos, finalizar el proceso llamando aplica () o commit () en el<br />

objeto Editor.<br />

La diferencia entre aplicar () y commit ()<br />

aplicar()<br />

Esto guarda los datos en la memoria inmediata y guarda los datos en el disco en un hilo<br />

separado. Por lo tanto no hay ninguna posibilidad de bloquear el hilo principal (su<br />

aplicación no se bloquea).<br />

Es la técnica de elección, pero sólo ha estado disponible desde el pan de jengibre (API 9,<br />

Android 2.3).<br />

cometer()<br />

Al llamar a este guardará los datos en el fichero sin embargo, el proceso se lleva a cabo en<br />

el hilo que lo llamó, parando todo lo demás hasta que el almacenamiento se haya<br />

completado. Se devuelve verdadero al finalizar con éxito, en caso de fallo.<br />

Utilice commit () si necesita la confirmación del éxito de guardar los datos o si está en<br />

desarrollo para dispositivos pre-pan de jengibre. commit () ha estado disponible desde el 1<br />

de API<br />

Tipo de datos que se puede ahorrar<br />

Utilice SharedPreferences para guardar y recuperar tipos de datos primitivos en pares de<br />

clave y valor (boolean, float, int, long, cuerdas). A partir de nido de abeja (11 API, Android<br />

3.0) también se puede ahorrar Set conjuntos de valores de cadena.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!