data storage
Embed Size (px)
DESCRIPTION
Presentación realizada para explicar los diferentes sistemas de almacenamiento que provee Android.TRANSCRIPT
- TALLER DE DESARROLLO DEAPLICACIONES MVILESData Storage Por: Felipe Hernndez R. Twitter: @FelipeDev
Cdigosde ejemplo Cdigos fuentesPara una mejor comprensin de este taller se hanrealizado proyectos (en eclipse) de ejemplo para cadauno de los tipos de DataStorage, exceptuando el detipo NetworkConnections.En su mayora las aplicaciones imprimen mensajespor consola para visualizar los estados de laaplicacin.El siguiente es el enlace a los cdigos fuentescomentados anteriormente:https://github.com/FelipeDev/Android-Data-StorageSe recomienda revisar los proyectos a medida que seavanza en la presentacin. Uso de cdigos fuentesPara utilizar los proyectos del taller se debe clonar elrepositorio Git, o bien descargar los archivosdirectamente desde el enlace entregado en la slideanterior y copiar los proyectos al workspace deEclipse, una vez dentro de eclipse, se deben importarlos proyectos copiados en el workspace. Tipos dealmacenamiento Android Storage* Shared Preferences* Internal Storage* External Storage* SQLite Databases* Network Connections SHARED PREFERENCES Shared preferencesEste tipo de almacenamiento permite salvar datosde tipo int, float, boolean, long y string. Estos datospersistiran incluso cuando la aplicacin esfinalizada.Para obtener los datos almacenados existen dosmtodos: getSharedPrefereces(); getPreferences(); getSharedPreferences()Este mtodo se debe utilizar cuando se deben llamarmltiples archivos que contienen la informacin de laspreferencias compartidas. Cada archivo es identificado porsu nombre, el cual se debe especificar como primerparmetro.Ej:SharedPreferences settings =getSharedPreferences(FILE_NAME,0);boolean silent = settings.getBoolean("silentMode", false);setSilent(silent); getPreferences()Este mtodo se debe utilizar se necesita slo un archivo depreferencias para el Activity. Como ste ser el nicoarchivo, no se debe proveer un nombre al invocarlo.Ej:SharedPreferences settings =getPreferences(0);boolean silent = settings.getBoolean("silentMode", false);setSilent(silent); getPreferences()Este mtodo se debe utilizar se necesita slo un archivo depreferencias para el Activity. Como ste ser el nicoarchivo, no se debe proveer un nombre al invocarlo.Ej:SharedPreferences settings =getPreferences(0);boolean silent = settings.getBoolean("silentMode", false);setSilent(silent); Acerca de SharedPreferencesLas preferencias compartidas no son nicamentepara guardar preferencias de usuario, como porejemplo el ringtone que pueda haber seleccionadoel usuario. Si lo que se desea es almacenarpreferencias de usuario para una aplicacin enparticular, vase PreferencesActivity, lo cual proveeun framework para crear preferencias de usuariolos cuales sern automticamente persistidos(usando SharedPreferences) INTERNAL STORAGE INTERNAL STORAGEEs posible guardar archivos directamente en elsistema de almacenamiento interno del dispositivo.Por defecto los archivos guardados en elalmacenamiento interno, son privados a laaplicacin que lo crea, por tanto, las demsaplicaciones no pueden acceder a estos archivos.Cuando el usuario desinstala la aplicacin, losarchivos son eliminados. Creacin y escritura en el almacenamiento internoPara crear y escribir en archivos creados en elalmacenamiento interno, se hace de la siguienteforma:a) Ejecutar el mtodo openFileOutput() con el nombre del archivo y el modo de operacin. Esto retorna un FileOutputStream.b) Escribir al archivo con write()C) Cerrar el stream con close() Lectura desdeel almacenamiento internoPara leer archivos desde el almacenamiento interno, sehace de la siguiente manera:a) Ejecutar el mtodo openFileInput() con el nombre del archivo y el modo de operacin. Esto retorna un FileInputStream.b) Leer los bytes desde el archivo con read()C) Cerrar el stream con close() Guardar archivos en cachSi se desea guardar datos en cach, ms all dealmacenarlos de manera persistente, se debe utilizar elmtodo getCacheDir() para abrir un objeto de tipo File querepresenta el directorio interno donde una aplicacinpuede guardar archivos de manera temporal. No serecomienda utilizar ms de 1mb de almacenamientotemporal.Importante: Cuando el dispositivo tiene poco espaciode almacenamiento interno, Android puede eliminar losarchivos en cach para recuperar espacio. Otros mtodos tilesgetFilesDir(): Obtiene la ruta absoluta de un archivo enel sistema de archivos donde los archivos internos sonalmacenados.getDir(): Crea (o abre si ya existe) un directorio dentrodel espacio del almacenamiento interno.deleteFile(): Elimina un archivo en el almacenamientointerno.fileList(): Devuelve un arreglo con los archivosguardados por la aplicacin (actual) en el sistema dealmacenamiento interno EXTERNAL STORAGE EXTERNAL STORAGETodo dispositivo compatible con Android soportaun almacenamiento externo compartido quepuede ser utilizado para almacenar archivos. Puedeser un medio removible (como una tarjeta SD) o unalmacenamiento interno (no removible). Losarchivos almacenados en un almacenamientoexterno pueden ser ledos por todos e inclusomodificados por el usuario cuando ste habilita elalmacenamiento masivo USB para transferirarchivos a su computador. Precauciones al utilizaralmacenamiento externoLos archivos guardados en un medio dealmacenamiento externo pueden desaparecer si elusuario monta este medio en un computador osimplemente lo desmonta del dispositivo, y no hayseguridad impuesta a los archivos que se escribenen un medio de almacenamiento externo.Todas las aplicaciones pueden leer los datosalmacenados en este tipo de almacenamiento yclaro los usuarios pueden eliminar estos datos. Como usar External StorageAntes de hacercualquier cosa con elalmacenamiento externo, se debe llamar al mtodogetExternalStorageState() para comprobar si existe algnmedio disponible.El medio puede devolver diferentes estadosespecificados en:http://developer.android.com/reference/android/os/Environment.htmlEl uso de los diferentes estados, sirve para notificaral usuario acerca de posibles anomalas con sumedio externo. Crear archivos en External StorageSi se est utilizando la api de nivel 8 (OS 2.2) osuperior, se debe utilizar el mtodo getExternalFileDir()para abrir un archivo que represente el directoriodonde se almacenarn los archivos. Este mtodorecibe como parmetro el tipo de directorio que sedeseacrear, como DIRECTORY_MUSIC oDIRECTORY_PICTURES.Al especificar el tipo de directorio nos aseguramos queel scanner de medios de Android categorizarcorrectamente nuestros archivos y/o directorios. Crear archivos en External StorageSi se est utilizando la api de nivel 7 (OS 2.1) oinferior, se debe utilizar el mtodogetExternalStorageDirectory() para abrir un archivo querepresente el directorio raz del almacenamientoexterno. Luego se debn escribir los datos en elsiguiente directorio: /Android/data/filesDonde es el nombre del paquete denuestra app, por ejemplo: cl.mobdev.app Grabar archivos cach en External StorageSi se est utilizando la api de nivel 8 (OS 2.2) osuperior, se debe utilizar el mtodo getExternalCacheDir()para abrir un archivo que represente el directoriotemporal donde almacenar los archivos en sistemadealmacenamiento externo.Si se est utilizando la api de nivel 7 (OS 2.1) oinferior, se debe utilizarel mtodogetExternalStorageDirectory() y seguir los mismos pasosque en la diapositiva anterior. ImportanteSi tenemos un archivo de audio, imagen o video, elscanner de medios de Android podra reconocernuestros archivos multimedia y agregarlos a laslistas que nombren este tipo de archivos.Para evitar que los archivos agregados por nuestraapp aparezcan en las listas de otras aplicaciones,se debe incluir un archivo vaco de nombre .nomediadentro del directorio de los archivos.. NetworkConnections NETWORK CONNECTIONSSi tenemos conexin a una red local ointernet, podemos almacenar y obtener nuestrosarchivos o datos mediante un servicio web.Para utilizar este tipo de almacenamiento se debeutilizar las clases correspondientes ubicadas en lospackages:java.net.*;Android.net.*; Basesde datos BASES DE DATOSAndroid provee total soporte para bases de datosSQLite. Cualquier base de datos creada, seraccesible por su nombre por cualquier clase dentrode nuestra app, pero no podr ser accedida desdefuera de nuestra app.Android provee de una herramienta para laadministracin de bases de datos SQLite, llamadasqlite3 la que permite navegar entre tablas decontenido y ejecutar comandos SQL en bases dedatos SQLite. CREAR BASES DE DATOSPara crear una nueva base de datos SQLite ennuestra app, se recomienda crear una subclase deSQLiteOpenHelper() y sobre-escribir el mtodo onCreate(), enel cual se puede ejecutar comandos de tipo SQL paracrear tablas en la base de datos.Se puede obtener una instancia de nuestra propiaimplementacin de SQLiteOpenHelper() usando unconstructor previamente definido. Leer y escribir registros en la DBPara escribir registros dentro de la base de datos, se debeutilizar el mtodo getWritableDatabase(), para leer datos de labase de datos se debe utilizar getReadableDatabase(). Ambosdevolvern un objeto de tipo SQLiteDatabase que representa labase de datos y provee mtodos para ejecutar operacionessobre ella.Para ejecutar consultas a la base datos es posible realizarlasmediante el mtodo query(), el cual acepta varios parmetros deconsulta como la tabla a consultar, seleccin, columnas, etc. Consultas complejas y cursoresPara consultas complejas como aquellas que requierendar alias a las columnas, se debe utilizar un objeto de tipoSQLiteQueryBuilder el cual proveer de varios mtodos pararealizar consultas complejas.En cuanto a los cursores, por cada consulta que se realicea la DB, la consulta devolver un Cursor que apunta a todaslas columnas afectadas por la consulta. Ms informacin Ms informacinTodas las lecturas y ejemplos se basan en ladocumentacin oficial de Android.Para mayor informacin visita el sitio oficial de Android:http://developer.android.com