data storage

35
TALLER DE DESARROLLO DE APLICACIONES MÓVILES Data Storage Por: Felipe Hernández R. Twitter: @FelipeDev

Upload: felipe-andres

Post on 04-Sep-2014

98 views

Category:

Technology


14 download

DESCRIPTION

Presentación realizada para explicar los diferentes sistemas de almacenamiento que provee Android.

TRANSCRIPT

Page 1: Data storage

TALLER DE DESARROLLO DE APLICACIONES MÓVILES

Data StoragePor: Felipe Hernández R.

Twitter: @FelipeDev

Page 2: Data storage

Códigosde ejemplo

Page 3: Data storage

Códigos fuentes

Para una mejor comprensión de este taller se han realizado proyectos (en eclipse) de ejemplo para cada uno de los tipos de DataStorage, exceptuando el de tipo NetworkConnections.En su mayoría las aplicaciones imprimen mensajes por consola para visualizar los estados de la aplicación.El siguiente es el enlace a los códigos fuentes comentados anteriormente:https://github.com/FelipeDev/Android-Data-Storage

Se recomienda revisar los proyectos a medida que se avanza en la presentación.

Page 4: Data storage

Uso de códigos fuentes

Para utilizar los proyectos del taller se debe clonar el repositorio Git, o bien descargar los archivos directamente desde el enlace entregado en la slide anterior y copiar los proyectos al workspace de Eclipse, una vez dentro de eclipse, se deben importar los proyectos copiados en el workspace.

Page 5: Data storage

Tipos de almacenamiento

Page 6: Data storage

Android Storage

* Shared Preferences

* Internal Storage

* External Storage

* SQLite Databases

* Network Connections

Page 7: Data storage

SHARED PREFERENCES

Page 8: Data storage

Shared preferences

Este tipo de almacenamiento permite salvar datos de tipo int, float, boolean, long y string. Estos datos persistiran incluso cuando la aplicación es finalizada.

Para obtener los datos almacenados existen dos métodos:

getSharedPrefereces();

getPreferences();

Page 9: Data storage

getSharedPreferences()

Este método se debe utilizar cuando se deben llamar múltiples archivos que contienen la información de las preferencias compartidas. Cada archivo es identificado por su nombre, el cual se debe especificar como primer parámetro.

Ej:

SharedPreferences settings =getSharedPreferences(FILE_NAME,0);

boolean silent = settings.getBoolean("silentMode", false);

setSilent(silent);

Page 10: Data storage

getPreferences()

Este método se debe utilizar se necesita sólo un archivo de preferencias para el Activity. Como éste será el único archivo, no se debe proveer un nombre al invocarlo.

Ej:

SharedPreferences settings =getPreferences(0);

boolean silent = settings.getBoolean("silentMode", false);

setSilent(silent);

Page 11: Data storage

getPreferences()

Este método se debe utilizar se necesita sólo un archivo de preferencias para el Activity. Como éste será el único archivo, no se debe proveer un nombre al invocarlo.

Ej:

SharedPreferences settings =getPreferences(0);

boolean silent = settings.getBoolean("silentMode", false);

setSilent(silent);

Page 12: Data storage

Acerca de SharedPreferences

Las preferencias compartidas no son únicamente para guardar preferencias de usuario, como por ejemplo el ringtone que pueda haber seleccionado el usuario. Si lo que se desea es almacenar preferencias de usuario para una aplicación en particular, véase PreferencesActivity, lo cual provee un framework para crear preferencias de usuario los cuales serán automáticamente persistidos (usando SharedPreferences)

Page 13: Data storage

INTERNAL STORAGE

Page 14: Data storage

INTERNAL STORAGE

Es posible guardar archivos directamente en el sistema de almacenamiento interno del dispositivo. Por defecto los archivos guardados en el almacenamiento interno, son privados a la aplicación que lo crea, por tanto, las demás aplicaciones no pueden acceder a estos archivos. Cuando el usuario desinstala la aplicación, los archivos son eliminados.

Page 15: Data storage

Creación y escritura en el almacenamiento interno

Para crear y escribir en archivos creados en el almacenamiento interno, se hace de la siguiente forma:

a) Ejecutar el método openFileOutput() con el nombre del archivo y el modo de operación. Esto retorna un FileOutputStream.

b) Escribir al archivo con write()

C) Cerrar el stream con close()

Page 16: Data storage

Lectura desde el almacenamiento interno

Para leer archivos desde el almacenamiento interno, se hace de la siguiente manera:

a) Ejecutar el método openFileInput() con el nombre del archivo y el modo de operación. Esto retorna un FileInputStream.

b) Leer los bytes desde el archivo con read()

C) Cerrar el stream con close()

Page 17: Data storage

Guardar archivos en caché

Si se desea guardar datos en caché, más allá de almacenarlos de manera persistente, se debe utilizar el método getCacheDir() para abrir un objeto de tipo File que representa el directorio interno donde una aplicación puede guardar archivos de manera temporal. No se recomienda utilizar más de 1mb de almacenamiento temporal.

Importante: Cuando el dispositivo tiene poco espacio de almacenamiento interno, Android puede eliminar los archivos en caché para recuperar espacio.

Page 18: Data storage

Otros métodos útiles

getFilesDir(): Obtiene la ruta absoluta de un archivo en el sistema de archivos donde los archivos internos son almacenados.getDir(): Crea (o abre si ya existe) un directorio dentro del espacio del almacenamiento interno.deleteFile(): Elimina un archivo en el almacenamiento interno.fileList(): Devuelve un arreglo con los archivos guardados por la aplicación (actual) en el sistema de almacenamiento interno

Page 19: Data storage

EXTERNAL STORAGE

Page 20: Data storage

EXTERNAL STORAGETodo dispositivo compatible con Android soporta un “almacenamiento externo” compartido que puede ser utilizado para almacenar archivos. Puede ser un medio removible (como una tarjeta SD) o un almacenamiento interno (no removible). Los archivos almacenados en un almacenamiento externo pueden ser leídos por todos e incluso modificados por el usuario cuando éste habilita el almacenamiento masivo USB para transferir archivos a su computador.

Page 21: Data storage

Precauciones al utilizar almacenamiento externo

Los archivos guardados en un medio de almacenamiento externo pueden desaparecer si el usuario monta este medio en un computador o simplemente lo desmonta del dispositivo, y no hay seguridad impuesta a los archivos que se escriben en un medio de almacenamiento externo. Todas las aplicaciones pueden leer los datos almacenados en este tipo de almacenamiento y claro… los usuarios pueden eliminar estos datos.

Page 22: Data storage

Antes de hacer cualquier cosa con el almacenamiento externo, se debe llamar al método getExternalStorageState() para comprobar si existe algún medio disponible.El medio puede devolver diferentes estados especificados en: http://developer.android.com/reference/android/os/Environment.htmlEl uso de los diferentes estados, sirve para notificar al usuario acerca de posibles anomalías con su medio externo.

Como usar External Storage

Page 23: Data storage

Si se está utilizando la api de nivel 8 (OS 2.2) o superior, se debe utilizar el método getExternalFileDir() para abrir un archivo que represente el directorio donde se almacenarán los archivos. Este método recibe como parámetro el tipo de directorio que se desea crear, como DIRECTORY_MUSIC o DIRECTORY_PICTURES.

Al especificar el tipo de directorio nos aseguramos que el scanner de medios de Android categorizará correctamente nuestros archivos y/o directorios.

Crear archivos en External Storage

Page 24: Data storage

Si se está utilizando la api de nivel 7 (OS 2.1) o inferior, se debe utilizar el método getExternalStorageDirectory() para abrir un archivo que represente el directorio raíz del almacenamiento externo. Luego se debn escribir los datos en el siguiente directorio: /Android/data/<nombre_Package>files

Donde <nombre_Package> es el nombre del paquete de nuestra app, por ejemplo: cl.mobdev.app

Crear archivos en External Storage

Page 25: Data storage

Si se está utilizando la api de nivel 8 (OS 2.2) o superior, se debe utilizar el método getExternalCacheDir() para abrir un archivo que represente el directorio temporal donde almacenar los archivos en sistema dealmacenamiento externo.

Si se está utilizando la api de nivel 7 (OS 2.1) o inferior, se debe utilizar el método getExternalStorageDirectory() y seguir los mismos pasos que en la diapositiva anterior.

Grabar archivos “caché” en External Storage

Page 26: Data storage

Si tenemos un archivo de audio, imagen o video, el scanner de medios de Android podría reconocer nuestros archivos multimedia y agregarlos a las listas que nombren este tipo de archivos.

Para evitar que los archivos agregados por nuestra app aparezcan en las listas de otras aplicaciones, se debe incluir un archivo vacío de nombre .nomedia dentro del directorio de los archivos..

Importante

Page 27: Data storage

Network Connections

Page 28: Data storage

Si tenemos conexión a una red local o internet, podemos almacenar y obtener nuestros archivos o datos mediante un servicio web.Para utilizar este tipo de almacenamiento se debe utilizar las clases correspondientes ubicadas en los packages:

java.net.*;Android.net.*;

NETWORK CONNECTIONS

Page 29: Data storage

Bases de datos

Page 30: Data storage

Android provee total soporte para bases de datos SQLite. Cualquier base de datos creada, será accesible por su nombre por cualquier clase dentro de nuestra app, pero no podrá ser accedida desde fuera de nuestra app.

Android provee de una herramienta para la administración de bases de datos SQLite, llamada sqlite3 la que permite navegar entre tablas de contenido y ejecutar comandos SQL en bases de datos SQLite.

BASES DE DATOS

Page 31: Data storage

Para crear una nueva base de datos SQLite en nuestra app, se recomienda crear una subclase de SQLiteOpenHelper() y sobre-escribir el método onCreate(), en el cual se puede ejecutar comandos de tipo SQL para crear tablas en la base de datos.Se puede obtener una instancia de nuestra propia implementación de SQLiteOpenHelper() usando un constructor previamente definido.

CREAR BASES DE DATOS

Page 32: Data storage

Para escribir registros dentro de la base de datos, se debe utilizar el método getWritableDatabase(), para leer datos de la base de datos se debe utilizar getReadableDatabase(). Ambos devolverán un objeto de tipo SQLiteDatabase que representa la base de datos y provee métodos para ejecutar operaciones sobre ella.

Para ejecutar consultas a la base datos es posible realizarlas mediante el método query(), el cual acepta varios parámetros de consulta como la tabla a consultar, selección, columnas, etc.

Leer y escribir registros en la DB

Page 33: Data storage

Para consultas complejas como aquellas que requieren dar alias a las columnas, se debe utilizar un objeto de tipo SQLiteQueryBuilder el cual proveerá de varios métodos para realizar consultas complejas.

En cuanto a los cursores, por cada consulta que se realice a la DB, la consulta devolverá un Cursor que apunta a todas las columnas afectadas por la consulta.

Consultas complejas y cursores

Page 34: Data storage

Más información

Page 35: Data storage

Todas las lecturas y ejemplos se basan en la documentación oficial de Android.

Para mayor información visita el sitio oficial de Android: http://developer.android.com

Más información