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.