Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
DESARROLLO
Android ofrece diferentes opciones para guardar los datos de una aplicación
de acuerdo con las necesidades que se ofrezcan.
Existen diferentes opciones de almacenamiento de datos disponibles en
Android:
Almacenamiento interno
Almacenamiento externo
Preferencias compartidas
Base de datos
Almacenamiento Interno
Sirve para almacenar archivos privados de aplicaciones en el sistema del
dispositivo.
De forma predeterminada, los archivos que se guardan en el almacenamiento
interno son privados para la aplicación, por lo que otras aplicaciones no pueden
tener acceso a ellos.
El sistema proporciona un directorio privado en el sistema de archivos para
cada aplicación. En ese directorio, se organiza cualquier archivo que necesite la
aplicación.
Cuando el usuario desinstala la aplicación, se quitan los archivos guardados
en el almacenamiento interno, debido a esto no se debe utilizar el almacenamiento
interno para guardar ningún contenido que el usuario espere que persista
independientemente de la aplicación.
Para ello se debe utilizar la API de MediaStore para guardar todos los tipos
de archivos mencionados anteriormente en la colección de contenido multimedia
correspondiente.
Archivos en la caché interna
Para almacenar datos temporalmente, en lugar de almacenarlos de forma
permanente, se utiliza el directorio especial de caché para guardarlos.
Cada aplicación tiene un directorio de caché privado específico para este tipo
de archivos por lo que cuando el dispositivo tenga poco espacio de almacenamiento
interno, Android podrá quitar esos archivos de caché para recuperar espacio.
La aplicación no requiere ningún permiso del sistema para leer y escribir en
los directorios internos devueltos por los métodos.
Consultar espacio libre
Para averiguar si hay suficiente espacio disponible sin causar una
IOException se llaman a los métodos getFreeSpace() o getTotalSpace(). Estos
métodos proporcionan el espacio disponible actual y el espacio total en el volumen
de almacenamiento, respectivamente.
El sistema no garantiza que se puedan escribir tantos bytes como se indican
mediante getFreeSpace().
Escribir un archivo
Al guardar un archivo en el almacenamiento interno, puede adquirir el
directorio apropiado como un File llamando a uno de los siguientes métodos:
getFilesDir(): Devuelve una File representación de un directorio interno
para la aplicación.
getCacheDir(): Devuelve una File representación de un directorio
interno para los archivos de caché temporales de la aplicación.
Para crear un nuevo archivo en uno de los directorios anteriores se hace uso
del constructor del File(), especificando el directorio de almacenamiento interno y el
nombre del archivo.
Código
File file = new File(context.getFilesDir(), filename);
Para una solución más rápida se usa la librería Jetpack security, que se
muestra a continuación:
Como alternativa se llama al método openFileOutput() para obtener
FileOutputStreamun que escriba en un archivo en su directorio interno.
Base de datos
Android proporciona compatibilidad completa con bases de datos de SQLite.
En lugar de usar las API de SQLite directamente, se puede crear una base de datos
e interactuar con ella mediante la persistencia de biblioteca de Room.
La biblioteca de Room proporciona una capa de abstracción de mapeo de
objetos que permite un acceso fluido a la base de datos mientras se aprovecha toda
la potencia de SQLite.
las API de SQLite son de nivel bastante bajo y requieren mucho tiempo y
esfuerzo para su uso. Por ejemplo:
No hay verificación en tiempo de compilación de las consultas SQL sin
procesar.
A medida que cambia el esquema, se necesita actualizar
manualmente las consultas SQL afectadas. Este proceso puede llevar
mucho tiempo y ser propenso a errores.
Se necesita escribir mucho código predeterminado para realizar
conversiones entre consultas SQL y objetos de datos Java.
Las API que necesitará para usar una base de datos en Android están
disponibles en el android.database.sqlitepaquete.
La biblioteca de persistencias de Room se encarga de esas cuestiones al
mismo tiempo que proporciona una capa de abstracción sobre SQLite.
Definir un esquema y contrato
El esquema se refleja en las declaraciones SQL que utiliza para crear la base
de datos. Puede resultar útil crear una clase complementaria, conocida como clase
de contrato, que especifique explícitamente el diseño de su esquema de forma
sistemática y autodocumentada.
Una clase de contrato es un contenedor de constantes que definen nombres
para URI, tablas y columnas. Permite usar las mismas constantes en todas las otras
clases en el mismo paquete. Esto le permite cambiar el nombre de una columna en
un lugar y hacer que se propague por todo el código.
Por ejemplo, el siguiente contrato define el nombre de la tabla y los nombres
de columna para una sola tabla que representa una fuente RSS:
https://code.tutsplus.com/es/tutorials/android-from-scratch-how-to-store-application-
data-locally--cms-26853