¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Desarrolle una aplicación Android
  3. Persistencia de datos
Extrait - Desarrolle una aplicación Android Programación en Java con Android Studio
Extractos del libro
Desarrolle una aplicación Android Programación en Java con Android Studio
1 opinión
Volver a la página de compra del libro

Persistencia de datos

Introducción

La aplicación LocDVD debe ser capaz de guardar los datos introducidos por el usuario. La plataforma Android provee varias soluciones para el almacenamiento de los datos. Este capítulo describe estas diferentes soluciones, abordando en primer lugar la copia en base de datos, a continuación describiendo las posibilidades de copia de seguridad previstas para las preferencias de usuario y, por último, la lectura y escritura de datos en el sistema de archivos del terminal.

Creación y modificación de una base de datos

Android integra, de manera nativa, un motor de base de datos, llamado SQLite. Si bien no ofrece todas las funcionalidades de un motor de base de datos orientado a servidor -no soporta procedimientos almacenados, por ejemplo- SQLite presenta todas las herramientas para manipular eficazmente cualquier tipo de datos.

1. Creación de la base de datos

De momento, los datos que se han de guardar en la aplicación son los datos propios de la pantalla de introducción de un DVD. Su copia se realiza cuando el usuario hace clic en el botón OK de esta pantalla.

El esquema de la base de datos se limita por tanto, inicialmente, a una tabla: Android presenta una API que gestiona a la perfección las actualizaciones de datos; será muy sencillo enriquecer este esquema a lo largo del desarrollo.

El paquete android.database.sqlite presenta dos clases esenciales para administrar las bases de datos: la clase abstracta SQLiteOpenHelper y la clase SQLiteDatabase.

  • SQLiteOpenHelper se encarga de la creación y de las modificaciones en la base de datos.

  • SQLiteDatabase presenta los métodos que permiten realizar todas las operaciones sobre los datos: consultas SQL, operaciones de lectura y de escritura de datos. Esta clase se estudia en la sección Manipulación de los datos. 

La primera etapa consiste, pues, en crear una clase que herede de SQLiteOpenHelper, donde será preciso implementar dos métodos:

  • onCreate, que se invoca por la plataforma durante la creación de la base de datos. 

  • onUpgrade, que se invoca para actualizar la base de datos.

La clase heredada debe, también, invocar el constructor de su clase madre, proporcionando el nombre de la base de datos, así como su número de versión: este número de versión permite al sistema determinar si la base de datos debe o no actualizarse.

 En el explorador del proyecto, cree una nueva clase de Java, llamada LocalSQLiteOpenHelper

 Declare que esta clase herede de SQLiteOpenHelper.

 Pulse [Alt][Enter] para importar automáticamente el paquete android.database.sqlite.SQLiteOpenHelper.

La clase creada contiene ahora el siguiente código:


package com.ejemplo.locdvd;  
  
  
import android.database.sqlite.SQLiteOpenHelper;  
  
public class LocalSQLiteOpenHelper extends...

Manipulación de los datos

La primera versión del esquema de la base de datos está lista. A continuación hay que implementar todos los métodos que nos van a permitir manipular los datos. La aplicación necesita poder realizar las siguientes acciones sobre los datos:

  • Consultar la base de datos para obtener la lista de todos los DVD registrados.

  • Consultar la base de datos para obtener un DVD a partir de su título.

  • Registrar un nuevo DVD.

  • Editar el registro de un DVD.

  • Eliminar un DVD.

1. Creación de la clase DVD

En primer lugar, hay que definir una clase DVD y, a continuación, crear los métodos que nos van a permitir realizar las acciones anteriores.

 En el explorador del proyecto, cree una nueva clase DVD.

 Defina, a continuación, las propiedades de la clase:

  • Un campo id, de tipo long.

  • Un campo titulo, de tipo String.

  • Un campo anyo, de tipo int.

  • Un campo actor, de tipo String[].

  • Un campo resumen, de tipo String.

 En el editor de código, haga clic con el botón derecho y seleccione la opción Generate, seleccione a continuación getter and setter para generar automáticamente los accesores de las propiedades.

El código de la clase es, de momento, el siguiente:


public class DVD {  
    long id;  
    String titulo;  
    int anyo;  
    String[]actores;  
    String resumen;  
  
  
    public long getId() {  
        return id;  
    }  
  
    public void setId(long id) {  
        this.id = id;  
    }  
  
    public String getTitulo() {  
        return titulo;  
    }  
  
    public void setTitulo(String titulo) {  
        this.titulo = titulo;  
    }  
  
    public int getAnyo() {  
        return anyo;  
    }  
  
    public void setAnyo(int anyo) {  
        this.anyo = anyo;  
    }  
  ...

Copia de las preferencias de usuario

Cuando los datos que se han de salvaguardar son poco numerosos, y no requieren ningún procesamiento por lotes, resulta molesto utilizar una base de datos. Android provee un mecanismo de almacenamiento particularmente adaptado a la copia de seguridad de este tipo de datos: los archivos de preferencias.

Los archivos de preferencias son archivos XML, gestionados por el sistema, que permiten salvaguardar los datos de tipos básicos, con el formato de pares clave/valor. La clase android.content.SharedPreferences presenta todos los métodos que permiten manipular estos archivos.

Para obtener una instancia de SharedPreferences, hay que invocar el método getSharedPreferences de la clase Context.


public abstract SharedPreferences getSharedPreferences (String  
name, int mode)
 

Los parámetros de este método son los siguientes:

  • String name: nombre del archivo XML utilizado para el almacenamiento. Se recomienda usar un nombre de archivo basado en el nombre único de la aplicación.

  • int mode: el modo en que se creará el archivo, entre los siguientes modos:

  • Context.MODE_PRIVATE: solo la aplicación tiene permisos de lectura/escritura sobre el archivo.

  • Context.MODE_WORLD_READABLE: solo la aplicación tiene permisos de escritura en el archivo. Las demás aplicaciones del terminal pueden acceder en modo lectura.

  • Context.MODE_WORLD_WRITABLE: todas las aplicaciones pueden...

Leer y escribir en un archivo

Para mejorar la experiencia de usuario durante la primera ejecución, es interesante proporcionar una aplicación que incluya ciertos datos de ejemplo. Si bien es posible rellenar previamente la base de datos integrando directamente algunas consultas SQL en el código, resulta más conveniente integrar un archivo de datos que se leerá durante la primera ejecución: los datos podrán modificarse fácilmente sin tener que modificar el código.

Hay que implementar los siguientes elementos:

  • Integrar un archivo de datos que se distribuye con la aplicación.

  • Leer e interpretar el archivo durante el primer arranque de la aplicación.

  • Registrar el hecho de que el archivo de datos se ha integrado, para evitar que la aplicación lo haga con cada arranque.

1. Integrar un archivo de datos

El almacenamiento de archivos que no deben interpretarse por el sistema se realiza en una carpeta particular de la aplicación: la carpeta assets. Esta carpeta se sitúa en la raíz de la aplicación, al mismo nivel que las carpetas res y src.

La carpeta assets no se crea por defecto, aunque Android Studio provee un asistente para su creación.

 Sitúe el cursor en la carpeta main de la solución.

 Haga clic con el botón derecho y seleccione la opción New; a continuación la opción Folder, y por último la opción Assets Folder.

 Se abre un asistente, que le permite modificar la ruta de acceso a la carpeta que se creará. Deje la opción desmarcada para crear la carpeta en su ubicación por defecto y haga clic en Finish.

Se crea la carpeta assets.

El desarrollador puede almacenar cualquier tipo de archivo en esta carpeta: datos binarios, imágenes, archivos de fuentes, etc. También es posible crear un árbol de carpetas completo.

Dado que los datos a integrar son únicamente textuales, lo más sencillo es crear un archivo de texto, donde cada línea del archivo represente un DVD y, por tanto, un registro.

 Sitúe el cursor en la carpeta assets recién creada.

 Haga clic con el botón derecho y seleccione la opción New y, a continuación, File.

Se abre una ventana pop-up que le permite introducir un nombre para el archivo. ...