Publicado el 20 de Octubre del 2018
2.091 visualizaciones desde el 20 de Octubre del 2018
921,4 KB
27 paginas
Creado hace 5a (07/06/2018)
Introducción
Este capítulo tiene como objetivo presentar la persistencia de los datos en Android.
Los datos persistentes de una aplicación son los datos salvaguardados antes del cierre de la
aplicación de tal forma que puedan ser restaurados posteriormente.
Android proporciona varios mecanismos que permiten gestionar la persistencia de los datos, en
función de la naturaleza de los mismos. Descubriremos los archivos de preferencias, los archivos
estándar y las bases de datos.
Terminaremos viendo los proveedores de contenido que, más allá de la persistencia de los datos,
proporcionan un mecanismo de compartición de datos entre las aplicaciones.
Archivos de preferencias
Android proporciona un framework simple para salvaguardar y restaurar los datos de tipos primitivos.
Estos datos se salvaguardan en archivos con formato XML bajo la forma de pares clave-valor. Estos
archivos se denominan archivos de preferencias.
Estudiaremos en primer lugar cómo preparar un archivo de preferencias, a continuación cómo leer y
escribir datos en él. Terminaremos viendo cómo borrar todos los datos, o parte de ellos, de estos
archivos.
El sistema Android permite visualizar y salvaguardar las preferencias generales del usuario. Toda
aplicación puede adoptar la misma funcionalidad y la misma representación. La jerarquía de
preferencias propuesta puede realizarse directamente en un archivo XML. La implementación de tal
pantalla de preferencias se realiza derivando la clase PreferenceActivity. Desde Android 3.0
fragmentos
(API
de tipoPreferenceFragment para poder, entre otros, mostrar de lado a lado los títulos de las
secciones y de las preferencias que proponen.
conjunta
funciona
forma
clase
esta
11),
con
los
de
1. Preparar el archivo
el
nombre
Por defecto, un archivo de preferencias está asociado a la actividad que lo crea. Este archivo lleva
automáticamente
por
ejemplo: es.midominio.android.miaplicacion.prefsArch1.xml.
La creación y la gestión del archivo de preferencias se realizan a través de un objeto
de tipoSharedPreferences devuelto por el método getPreferences de la clase Activity.
Sintaxis
correspondiente,
completo
actividad
de
la
public SharedPreferences getPreferences (int mode)
Este método recibe como parámetro el modo de acceso que se quiere asignar al archivo tras su
creación. Los valores disponibles para este parámetro son:
Context.MODE_PRIVATE: modo privado. Es el modo por defecto. El archivo sólo puede
leerse desde la aplicación en curso, o una aplicación que comparta el mismo identificador de
usuario.
Context.MODE_WORLD_READABLE: las demás aplicaciones pueden leer el archivo.
Context.MODE_WORLD_WRITEABLE: las demás aplicaciones pueden modificar el archivo.
Ejemplo
SharedPreferences prefs = getPreferences(Context.MODE_PRIVATE);
También es posible especificar explícitamente otro nombre de archivo. Esto permite crear varios
archivos
el
método getSharedPreferencesespecificando el nombre del archivo como primer parámetro.
Sintaxis
preferencias.
utilizar
Para
ello,
que
hay
de
public abstract SharedPreferences getSharedPreferences (String name,
int mode)
Ejemplo
SharedPreferences prefs =
getSharedPreferences("nombreArchivoPrefs1.xml",
Context.MODE_PRIVATE);
2. Lectura
Los datos contenidos en un archivo de preferencias se almacenan bajo la forma de pares clave-valor.
Tales asociaciones están compuestas:
por una clave que es una cadena de caracteres de tipo String.
por un valor de tipo primitivo: boolean (booleano), float (número de coma
flotante), into long (enteros) o String (cadena de caracteres).
Para
leer los datos contenidos en un archivo de preferencias se utiliza el objeto de
tipoSharedPreferences recuperado anteriormente. Se invoca a continuación a ciertos accesores
que permiten leer individualmente un dato según su tipo.
Sintaxis
public abstract boolean getBoolean (String key, boolean defValue)
public abstract float getFloat (String key, float defValue)
public abstract int getInt (String key, int defValue)
public abstract long getLong (String key, long defValue)
public abstract String getString (String key, String defValue)
El primer parámetro es el nombre de la clave. El segundo parámetro es el valor por defecto que se
quiere devolver si no existe la clave.
Ejemplo
boolean modoWifi = prefs.getBoolean("modoWifi", false);
int contador = prefs.getInt("contador", 0);
String comentario = prefs.getString("comentario", "");
También es posible recuperar todos los datos de golpe utilizando el método getAll.
Sintaxis
public abstract Map<String, ?> getAll ()
Ejemplo
Map<String, ?> valores = prefs.getAll();
Boolean modoWifi = (Boolean)valores.get("modoWifi");
El método contains del objeto SharedPreferences permite verificar la existencia de una clave
dada que se le pasa como parámetro.
Sintaxis
public abstract boolean contains (String key)
Ejemplo
if (prefs.contains("modoWifi")) {
procesamiento();
}
3. Escritura
La escritura de datos en un archivo de preferencias se realiza a través de un objeto
de tipoSharedPreferences.Editor. Este objeto lo devuelve el método edit invocado sobre el
objeto de tipo SharedPreferences recuperado anteriormente.
Sintaxis
public abstract SharedPreferences.Editor edit ()
Ejemplo
SharedPreferences.Editor editor = prefs.edit();
El objeto Editor anterior permite especificar nuevos datos o modificar los datos existentes
borrándolos con los nuevos. Estos métodos permiten escribir individualmente un par clave-valor. De
forma similar a los métodos de lectura, existe un método de escritura por cada tipo primitivo. Estos
métodos reciben como parámetro el nombre de la clave y el valor del dato.
Sintaxis
public abstract SharedPreferences.Editor putBoolean (String key,
boolean value)
public abstract SharedPreferences.Editor putFloat (String key,
float value)
public abstract SharedPreferences.Editor putInt (String key,
int value)
public abstract SharedPreferences.Editor putLong (String key,
long value)
public abstract SharedPreferences.Editor putString (String key,
String value)
Ejemplo
editor.putBoolean("modoWifi", true);
editor.putInt("contador", 42);
editor.putString("comentario", "Esto es un comentario");
los datos no será efectiva en el archivo hasta que se ejecute el
La escritura de
método commit delobjeto Editor.
Sintaxis
public abstract boolean commit ()
Ejemplo
editor.commit();
Preste atención a no olvidarse de llamar al método commit. En efecto, si no realiza esta
llamada, el objeto Editor no sirve de nada; no se registrarán las modificaciones que
contiene.
4. Borrado
El borrado de los datos contenidos en un archivo de preferencias se hace utilizando el
objetoeditor de tipo SharedPreferences.Editor igual que para escribir los datos.
El método remove del objeto Editor permite suprimir un par clave-valor. Se pasa el nombre de la
clave como parámetro.
Sintaxis
public abstract SharedPreferences.Editor remove (String key)
Ejemplo
editor.remove("modoWifi");
El método clear permite borrar todos los datos, es decir, todos los pares clave-valor.
Sintaxis
public abstract SharedPreferences.Editor clear ()
Ejemplo
editor.clear();
Como ocurre con la escritura, es necesario invocar al método commit para registrar los cambios.
También
objeto Editordevuelven este mismo objeto.
Ejemplo
las modificaciones, puesto que
los métodos del
es posible
encadenar
editor.clear().putBoolean("modoWifi", modoWifi).commit();
Cuando se invoca al método commit, el método clear se ejecuta en primer lugar, sea cual
sea la posición de su llamada.
Es posible, por ejemplo, reescribir la línea anterior sin modificar el resultado.
Ejemplo
editor.putBoolean("modoWifi", modoWifi).clear().commit();
Archivos
Como acabamos de ver en la sección anterior, los archivos de preferencias son la solución ideal para
salvaguardar valores de tipos primitivos de manera simple. Pero si lo que se quiere es almacenar datos
más complejos o datos brutos sin un formato adaptado al formato XML como, por ejemplo, la copia de
una imagen con formato PNG, esta solución no es adecuada.
Necesitamos poder crear, escribir y leer archivos directamente.
Android permite guardar archivos en el almacenamiento interno del dispositivo o en un almacenamiento
externo como, por ejemplo, una tarjeta SD. Proporciona también las API para guardar archivos
temporales o archivos de caché en ubicaciones definidas.
Vamos, por tanto, a ver en primer lugar la gestión de archivos en el almacenamiento interno, y en
segundo lugar sobre un almacenamiento externo. Por último, veremos la gestión de los archivos
temporales.
1. Almacenamiento interno
Por defecto, los archivos se almacenan en el almacenamiento interno del dispositivo. El acceso a
estos archivos está restringido a la aplicación. Ni el usuario ni las demás aplicaciones pueden acceder
a él.
Vamos a ver cómo crear un archivo en el almacenamiento interno, cómo leerlo y, por último, cómo
borrarlo.
a. Escritura
La creación de un archivo se realiza invocando al método openFileOutput de la claseContext.
Este método espera recibir dos parámetros: el nombre del archivo sin arborescencia y el modo de
acceso que se quiere asignar a este archivo. El método devuelve un
flujo de
tipoFileOutputStream.
Sintaxis
public abstract FileOutputStream openFileOutput (String name,
int mode)
Ejemplo
FileOutputStream flujo = openFileOutput("miArchivo.png",
Context.MODE_PRIVATE);
El flujo devuelto permite escribir los datos brutos en el archivo utilizando los distintos
métodoswrite.
Si
Comentarios de: Persistencia De Datos en Android (0)
No hay comentarios