Está en la página 1de 11

Almacenamiento de datos en Android

Universidad de Cuenca
Escuela de Informtica
Carlos Plaza
Optativa 3 - Programacin Mvil
30/12/2014

Contenido
Introduccin...................................................................................................................................................3
Objetivos........................................................................................................................................................3
Marco Terico................................................................................................................................................3
Preferencias...............................................................................................................................................3
Ficheros.....................................................................................................................................................3
XML..........................................................................................................................................................3
SQLite.......................................................................................................................................................3
ContentProvider.........................................................................................................................................3
Prctica......................................................................................................................................................3
Calculando la puntuacin en Asteroides...............................................................................................4
Almacenando la ltima puntuacin en un fichero preferencias............................................................4
Almacenando puntuaciones en un fichero de la memoria interna........................................................5
Almacenando puntuaciones en la memoria externa..............................................................................6
Utilizando una base de datos para guardar puntuaciones.....................................................................8
Verificacin de los ficheros creados......................................................................................................9
Utilizacin del mtodo query() para guardar puntuaciones..................................................................9
Leer informacin de un ContentProvider..............................................................................................9
Escribir informacin en un ContentProvider......................................................................................10
Borrar y modificar elementos de un ContentProvider........................................................................10
Conclusiones................................................................................................................................................11
Bibliografa..................................................................................................................................................11

Introduccin

Muchos usuarios requeran que sus aplicaciones almacenen los datos producidos en un determinado momento, por lo que
para un desarrollador tomar en cuenta este punto debe ser de gran importancia para implementar en las aplicaciones que se
estn desarrollando.
Para determinar qu tipo de almacenamiento implementar se debern considerar algunos aspectos tales como: tiempo de
acceso, la cantidad de informacin de se requiere almacenar o si va estar compartida para otros entornos donde se requiera
manejar una representacin de datos estndar, etc., entonces teniendo en cuenta algunas de estas consideraciones podremos
implementar algn tipo de almacenamiento ,considerando el ms adecuado con el fin de que nuestras aplicaciones tengan la
mayor calidad posible.

Objetivos

Usar permisos.
Utilizar ficheros de texto, xml y la base de datos SQLite.
Usar la clase ContentProvider.
Implementar los distintos tipos de almacenamiento en el proyecto asteroides.
Determinar mejores opciones para el almacenamiento de datos.

Marco Terico

Preferencias
Es un mecanismo liviano que permite guardar y recuperar datos. Maneja datos primitivos con la estructura clave-valor.
Comnmente usado para almacenar parmetros de configuracin.
Ficheros
Es posible almacenar ficheros tanto en la memoria interna como externa del dispositivo. Tambin es posible utilizar ficheros
aadidos a nuestras aplicaciones como recursos.
XML
Es un archivo que sigue un determinado estndar. Android provee dos libreras para manipular estos tipos de archivos como
son SAX y DOM.
SQLite
Las APIs de Android contienen soporte para SQLite. Donde nuestras aplicaciones pueden crear y usar estas bases de datos
SQLite de forma sencilla y obviamente aprovechando la potencia que ofrece el lenguaje SQL.
ContentProvider
Un proveedor de contenidos es un componente opcional de una aplicacin que expone el acceso de lectura/escritura de sus
datos a otras aplicaciones. Es posible implementar las restricciones de seguridad que deseemos imponer.
Los proveedores de contenidos implementar una sintaxis estndar para solicitar datos URIs y un mecanismo de acceso
para devolver los datos similar a SQL.
Prctica
3

Calculando la puntuacin en Asteroides


1.

Crear una variable global en la clase VistaJuego de la siguiente manera.


private int puntuacion = 0;

2.

Aadir dentro del mtodo destruyeAsteroide() la siguiente lnea:


puntuacion += 1000;

3.

Sustituir el mtodo lanzarJuego() de la clase Asteroides y aadir el cdigo:

public void lanzarJuego(View view) {


Intent i = new Intent(this, Juego.class);
startActivityForResult(i, 1234);
}
@Override
protected void onActivityResult
(int requestCode,int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if (requestCode==1234 && resultCode==RESULT_OK && data!=null) {
int puntuacion =data.getExtras().getInt("puntuacion");
String nombre = "Yo";
// Mejor leerlo desde un Dialog o una nueva actividad AlertDialog.Builder
almacen.guardarPuntuacion(puntuacion,
nombre, System.currentTimeMillis());
lanzarPuntuaciones();
}
}
4. Introducir en VistaJuego el siguiente cdigo:
private Activity padre;
public void setPadre(Activity padre) {
this.padre = padre;
}
5. Crear el siguiente mtodo dentro de la clase VistaJuego.

6.

Introducir al final del mtodo destruyeAsteroide();

7.

Introducir al final del mtodo actualizaFisica():

8.

En el mtodo onCreate de Juego introducir:


vistaJuego.setPadre(this);
4

Almacenando la ltima puntuacin en un fichero preferencias


1.
2.

En el proyecto asteroides crear una clase AlmacenPuntuacionesPreferencias.


Remplazar por lo siguiente:

3.

Modificar el mtodo onCreate() de la clase Asteroides para ejecutar la siguiente lnea:


almacen = new AlmacenPuntuacionesPreferencias(this);

4.

Ejecutar el proyecto y verificar que la puntuacin se guarda correctamente.

5.

Verificar el archivo puntuaciones.xml

Almacenando puntuaciones en un fichero de la memoria interna


1.

En el proyecto Asteroides crear una clase AlmacenPuntuacionesFicheroInterno y remplazar el cdigo por el


siguiente:

2.

En el mtodo onCreate() de la clase Asteroides remplazar la lnea adecuada por


almacen = new AlmacenPuntuacionesFicheroInterno(this);

3.

Ejecutar la aplicacin.

4.

Verificar el fichero puntuaciones.txt

Almacenando puntuaciones en la memoria externa


1.
2.

3.
4.
5.

Copiar la clase AlmacenPuntuacionesFicheroInterno del proyecto Asteroides y pegarlo en el mismo proyecto,


renombrarlo como AlmacenPuntuacionesFicheroExterno.
Remplazar la inicializacin de la variable FICHERO por:
private static String FICHERO =Environment. getExternalStorageDirectory() + "/puntuaciones.txt";
En el metodo guardarPuntuacion() remplazar la inicializacion de la variable f por:
FileOutputStream f= new FileOutputStream(FICHERO, true);
En el metodo listaPuntacion() reemplazar la inicializacion de la variable f por:
FileInputStream f = new FileInputStream(FICHERO);
Abrir el fichero AndroidManifest.xml y solicitar el permiso.
WRITE_EXTERNAL_STORAGE
6

6.

Ejecutar la aplicacin.

7.

Verificar el fichero.

Almacenando puntuaciones en XML con DOM


1. Crear la clase AlmacenPuntuacionesXML_DOM y remplazar por el siguiente cdigo

2.

Ejecucin de la aplicacin.

3.

El archivo puntuaciones.xml.

Utilizando una base de datos para guardar puntuaciones.


1.

Crear la clase AlmacenPuntuacionesSQLite en el proyecto Asteroides y escribir el siguiente cdigo.

2.

Modificar el cdigo correspondiente en Asteroides.java para que este mtodo pueda ser seleccionado para
almacenar las puntuaciones.
Verificar el funcionamiento.

3.

4.

Visualizacin de la base de datos

Verificacin de los ficheros creados


1.

En Android Device Monitor se puede comprobar todos los ficheros creados y se puede determinar la variacin de
tamao de cada uno.

Utilizacin del mtodo query() para guardar puntuaciones.


1.

En el mtodo listaPuntuaciones() de la clase AlmacenPuntuacionesSQlite remplazar la llamda al mtodo


rawQuery() por el siguiente cdigo:

2.

Verificar el que el funcionamiento es idntico.

3.

Verificando los datos de la base de datos de SQLite mediante el plugin para mozilla (SQLite Manager.
https://addons.mozilla.org/es/firefox/addon/sqlite-manager/)

Leer informacin de un ContentProvider


1.

Crear una aplicacin llamada ContentCallLog, y remplazar el layout principal por lo siguiente.

2.

Aadir al final del fichero AndroidManifest.xml las lneas:

3.

Aadir al final del mtodo onCreate de la actividad principal el siguiente cdigo.

4.

Ejecucin de la aplicacin

5.

Remplazar la lnea Cursor c = managedQuery(llamadas, null, null, null, null); por,

String[] proyeccion = new String[] {


Calls.DATE, Calls.DURATION, Calls.NUMBER, Calls.TYPE
};
String[] argsSelecc = new String[] {"1"};
Cursor c = managedQuery(
llamadas, // Uri del ContentProvider
proyeccion, // Columnas que nos interesan
"type = ?", // consulta WHERE
argsSelecc, // parmetros de la consulta anterior
"date DESC"); // Ordenado por fecha, orden ascenciente
6. Ejecucin de la aplicacin

Escribir informacin en un ContentProvider


1.

Aadir un nuevo elemento en un ContentProvider con el siguiente cdigo.

10

2.

Aadir el permiso de la siguiente manera:

3.

Ejecucin de la aplicacin

Borrar y modificar elementos de un ContentProvider


1.

Para modifcar los elementos de un ContentProvider se realiza a travs del mtodo update().
int ContentProvider.update(Uri uri, ContentValues valores, String seleccion, String[] argsSelecc)
2. Para modificar los registros con numero 555555555 por el numero 444444444, se implementara el siguiente
codigo.
ContentValues valores2 = new ContentValues();
valores2.put(Calls.NUMBER, "444444444");
getContentResolver().update(Calls.CONTENT_URI,valores2,"number='555555555'", null);
3. Ejecucin de la aplicacin

4.
5.
6.

Para eliminar elementos de un ContentProvider se puede utilizar el mtodo delete():


int ContentProvider.delete(Uri uri, String seleccion,String[]argsSelecc)
Para eliminar todos los registros de llamada del numero 444444444, se realizara de la siguiente manera.
getContentResolver().delete(Calls.CONTENT_URI,"number='555555555'", null);
Ejecucin de la aplicacin.

Conclusiones

Debido a los diversos tipos de almacenamiento que Android provee, seleccionar entre uno u otro almacenamiento tendr
que estar relacionada con la orientacin de la aplicacin, de manera que obtengamos el mayor rendimiento posible de
nuestras aplicaciones.

Bibliografa

El gran libro de Android

11