almacenamiento en android

12
Almacenamiento de datos en Android Universidad de Cuenca Escuela de Informática Carlos Plaza Optativa 3 - Programación Móvil 30/12/2014

Upload: carlos-plaza

Post on 25-Dec-2015

27 views

Category:

Documents


1 download

DESCRIPTION

Uso de la base de datos sqlite, preferencias, archivos, etc.

TRANSCRIPT

Almacenamiento de datos en Android

Universidad de CuencaEscuela de Informática

Carlos PlazaOptativa 3 - Programación Móvil

30/12/2014

ContenidoIntroducción...................................................................................................................................................3

Objetivos........................................................................................................................................................3

Marco Teórico................................................................................................................................................3

Preferencias...............................................................................................................................................3

Ficheros.....................................................................................................................................................3

XML..........................................................................................................................................................3

SQLite.......................................................................................................................................................3

ContentProvider.........................................................................................................................................3

Práctica......................................................................................................................................................3

Calculando la puntuación en Asteroides...............................................................................................4

Almacenando la última puntuación 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

Verificación de los ficheros creados.....................................................................................................9

Utilización del método query() para guardar puntuaciones..................................................................9

Leer información de un ContentProvider..............................................................................................9

Escribir información en un ContentProvider......................................................................................10

Borrar y modificar elementos de un ContentProvider........................................................................10

Conclusiones................................................................................................................................................11

Bibliografía..................................................................................................................................................11

2

Introducción

Muchos usuarios requerían 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 estén desarrollando.

Para determinar qué tipo de almacenamiento implementar se deberán considerar algunos aspectos tales como: tiempo de acceso, la cantidad de información de se requiere almacenar o si va estar compartida para otros entornos donde se requiera manejar una representación de datos estándar, etc., entonces teniendo en cuenta algunas de estas consideraciones podremos implementar algún tipo de almacenamiento ,considerando el más 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 Teórico

Preferencias

Es un mecanismo liviano que permite guardar y recuperar datos. Maneja datos primitivos con la estructura clave-valor.

Comúnmente usado para almacenar parámetros de configuración.

Ficheros

Es posible almacenar ficheros tanto en la memoria interna como externa del dispositivo. También es posible utilizar ficheros añadidos a nuestras aplicaciones como recursos.

XML

Es un archivo que sigue un determinado estándar. Android provee dos librerías 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 aplicación 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 estándar para solicitar datos “URIs” y un mecanismo de acceso para devolver los datos similar a SQL.

Práctica

3

Calculando la puntuación en Asteroides

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

private int puntuacion = 0;

2. Añadir dentro del método destruyeAsteroide() la siguiente línea:

puntuacion += 1000;

3. Sustituir el método lanzarJuego() de la clase Asteroides y añadir el código:

public void lanzarJuego(View view) {Intent i = new Intent(this, Juego.class);startActivityForResult(i, 1234);

}

@Overrideprotected 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.Builderalmacen.guardarPuntuacion(puntuacion,nombre, System.currentTimeMillis());lanzarPuntuaciones();

}}4. Introducir en VistaJuego el siguiente código:private Activity padre;

public void setPadre(Activity padre) {this.padre = padre;

}5. Crear el siguiente método dentro de la clase VistaJuego.

6. Introducir al final del método destruyeAsteroide();

7. Introducir al final del método actualizaFisica():

8. En el método onCreate de Juego introducir:vistaJuego.setPadre(this);

Almacenando la última puntuación en un fichero preferencias

1. En el proyecto asteroides crear una clase AlmacenPuntuacionesPreferencias.

4

2. Remplazar por lo siguiente:

3. Modificar el método onCreate() de la clase Asteroides para ejecutar la siguiente línea:

almacen = new AlmacenPuntuacionesPreferencias(this);

4. Ejecutar el proyecto y verificar que la puntuación 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 código por el siguiente:

5

2. En el método onCreate() de la clase Asteroides remplazar la línea adecuada por

almacen = new AlmacenPuntuacionesFicheroInterno(this);

3. Ejecutar la aplicación.

4. Verificar el fichero puntuaciones.txt

Almacenando puntuaciones en la memoria externa

1. Copiar la clase AlmacenPuntuacionesFicheroInterno del proyecto Asteroides y pegarlo en el mismo proyecto, renombrarlo como AlmacenPuntuacionesFicheroExterno.

2. Remplazar la inicialización de la variable FICHERO por:

private static String FICHERO =Environment. getExternalStorageDirectory() + "/puntuaciones.txt";3. En el metodo guardarPuntuacion() remplazar la inicializacion de la variable f por:

FileOutputStream f= new FileOutputStream(FICHERO, true);4. En el metodo listaPuntacion() reemplazar la inicializacion de la variable f por:

FileInputStream f = new FileInputStream(FICHERO);5. Abrir el fichero AndroidManifest.xml y solicitar el permiso.

WRITE_EXTERNAL_STORAGE6. Ejecutar la aplicación.

6

7. Verificar el fichero.

Almacenando puntuaciones en XML con DOM1. Crear la clase AlmacenPuntuacionesXML_DOM y remplazar por el siguiente código

7

2. Ejecución de la aplicación.

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 código.

2. Modificar el código correspondiente en Asteroides.java para que este método pueda ser seleccionado para almacenar las puntuaciones.

3. Verificar el funcionamiento.

4. Visualización de la base de datos

8

Verificación de los ficheros creados

1. En Android Device Monitor se puede comprobar todos los ficheros creados y se puede determinar la variación de tamaño de cada uno.

Utilización del método query() para guardar puntuaciones.

1. En el método listaPuntuaciones() de la clase AlmacenPuntuacionesSQlite remplazar la llamda al método rawQuery() por el siguiente código:

2. Verificar el que el funcionamiento es idéntico.

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 información de un ContentProvider

1. Crear una aplicación llamada ContentCallLog, y remplazar el layout principal por lo siguiente.

2. Añadir al final del fichero AndroidManifest.xml las líneas:

3. Añadir al final del método onCreate de la actividad principal el siguiente código.

9

4. Ejecución de la aplicación

5. Remplazar la línea 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 ContentProviderproyeccion, // Columnas que nos interesan"type = ?", // consulta WHEREargsSelecc, // parámetros de la consulta anterior"date DESC"); // Ordenado por fecha, orden ascenciente6. Ejecución de la aplicación

Escribir información en un ContentProvider

1. Añadir un nuevo elemento en un ContentProvider con el siguiente código.

2. Añadir el permiso de la siguiente manera:

3. Ejecución de la aplicación

Borrar y modificar elementos de un ContentProvider

1. Para modifcar los elementos de un ContentProvider se realiza a través del método update().int ContentProvider.update(Uri uri, ContentValues valores, String seleccion, String[] argsSelecc)

10

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. Ejecución de la aplicación

4. Para eliminar elementos de un ContentProvider se puede utilizar el método delete():int ContentProvider.delete(Uri uri, String seleccion,String[]argsSelecc)

5. Para eliminar todos los registros de llamada del numero 444444444, se realizaría de la siguiente manera.

getContentResolver().delete(Calls.CONTENT_URI,"number='555555555'", null);6. Ejecución de la aplicación.

Conclusiones

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

Bibliografía

El gran libro de Android

11