Aprende Android

Vaya al Contenido

Menu Principal

Almacenamiento de datos (1ª parte)

Almacenando datos

¿Qué vamos a ver?

  • Descubrir medios de almacenamiento de datos

  • Obtener permisos de usuario

  • Crear una base de datos de SQLite

  • Consultar la base de datos


La mayoría de las aplicaciones requieren guardar información. Para ello, la plataforma Android proporciona varias herramientas que pueden utilizarse para almacenar sus datos. Nosotros utilizaremos para crear y actualizar una base de datos SQLite.

Para poder utilizar la base de datos y para que la aplicación de aviso de las tareas cuando se agregue el código gestor de la alarma, será necesario añadir al archivo “AndroidManifest.xml” los permisos necesarios:

  • android.permission.RECEIVE_BOOT_COMPLETED

  • android.permission.WAKE_LOCK


El primero permite el acceso a las aplicaciones para saber cuándo el teléfono se reiniciará, y el segundo permite al teléfono mantener el proceso que está realizando, mientras se salta el proceso de fondo.

Existen otros permisos que son muy comunes en la mayoría de las aplicaciones:

  • Acceso a Internet: android.permission.INTERNET

  • Acceso de escritura a la tarjeta SD: android.permission.WRITE_EXTERNAL_STORAGE



Para añadir estos permisos en el archivo “AndroidManifest.xml”, se puede hacer a través del editor de permisos abriendo el archivo; o bien, manualmente añadiendo líneas de código como la siguiente: “<uses-permission android:name=”android.permission.INTERNET”/>”.

Añade los cuatro permisos dentro del archivo AndroidManifest, tal cual el ejemplo colocado en el párrafo anterior.

Vamos a crear una aplicación de base de datos SQLite

La aplicación Task Reminder necesita un lugar para almacenar y recuperar sus tareas, y el mejor lugar para este tipo de información está dentro de una base de datos SQLite. La aplicación necesita leer, crear, actualizar y eliminar tareas de la base de datos.

¿Cómo funciona la base de datos SQLite?

Como dijimos, son dos actividades las que utiliza la aplicación:

ReminderEditActivity:

  • Crea un nuevo registro

  • Lee un registro para que pueda ver los detalles para su edición

  • Actualiza el registro existente


ReminderListActivity:

  • Leer todas las tareas que se muestran en la pantalla

  • Eliminar una tarea, tras responder a los eventos de clic en el menú contextual cuando el usuario mantenga pulsado un elemento


Para trabajar con una base de datos SQLite, debes comunicarte con SQLite a través de clases del paquete android.database.

Lo primero que se debe hacer es crear un archivo de Java en el proyecto, que contará con todo el código necesario. El archivo que vamos a crear para ello lo llamaremos “RemindersDbAdapter.java”. En como un adaptador, que sigue un patrón que maneja la comunicación de la base de datos y la aplicación a través del lenguaje de comunicación Java sirviendo como traductor.

El código del archivo “
RemindersDbAdapter.java”, es el siguiente:

1  private static final String DATABASE_NAME = “data”;
2  private static final String DATABASE_TABLE = “reminder”;
3  private static final int DATABASE_VERSION = 1;
4
5  public static final String KEY_TITLE = “title”;
6  public static final String KEY_BODY = “body”;
7  public static final String KEY_DATE_TIME =”reminder_date_time”;
8  public static final String KEY_ROWID =”_id”;
9
10 private DatabaseHelper mDbHelper;
11 private SQLiteDatabase mDb;
12 private static final String DATABASE_CREATE =
13        “create table “ + DATABASE_TABLE + “ (“
+ KEY_ROWID + “ integer primary key autoincrement, “
+ KEY_TITLE + “ text not null, “
+ KEY_BODY + “ text nor null, “
+ KEY_DATE_TIME + “ text not null);”;
18
19 private final Context mCtx;
20
21 public RemindersDBAdapter (Context ctx) {
this.mCtx = ctx;
23 }

En la fila 1 aparece el nombre de la base de datos del sistema de archivos de Android.
En la 2 se pone el nombre de la tabla de la base de datos que contendrá la tarea.
En la 3 es la versión de la base de datos.
Entre las filas 5 y 8 se definen los nombres de las columnas de la tabla.
En la fila 10 vemos el DatabaseHelper que es una implementación de la clase SQLite OpenHelper de Android. SQLiteOpenHelper ayuda  en la creación y gestión de versiones de la base de datos de SQLite.
En la fila 11 tenemos la clase de instancia que permite crear, leer, actualizar y eliminar registros.
De la fila 12 a la 17 se define la secuencia de comandos de creación de la base de datos creando las diferentes columnas.
En la fila 19 está el objeto de contexto que se asociará con el objeto de la base de datos SQLite.
De la 21 a la 22 el contexto objeto se ajusta mediante el constructor de la clase.

El objeto de la tabla en SQL es la estructura que contiene los datos que se van a manejar. Cada fila en la tabla se compone de datos, y cada columna representa los datos dentro de la fila.

La base de datos se vería algo así como la imagen de la derecha:

Con el código anterior, se concatenan varias constantes dentro del archivo, para crear una base de datos, de tal forma, que al ejecutarse el script en SQLite, se crea una tabla con el nombre de reminder, en una base de datos llamada datos.

  • “create table “ + DATABASE_TABLE: Este código le dice a SQLite que quiere crear una tabla de base de datos con el nombre reminder.

  • KEY_ROWID: Esta propiedad actúa como el identificador de la tarea. Esta columna es un número entero auto incrementable y es la clave principal (identificador principal de la tarea). El atributo autoincrement informa a SQLite que cada vez que se inserta una nueva tarea, simplemente incrementa automáticamente la ROW_ID al entero siguiente disponible.

  • KEY_TITLE: Este es el título de la tarea que el usuario proporciona; el atributo “text” informa a SQLite que se trata de una columna con texto; el “not null” le indica que el valor no puede ser nulo.

  • KEY_BODY: Es la descripción de la tarea a realizar. Tiene los mismos atributos que KEY_TITLE.

  • KEY_DATE_TIME: Es donde se almacenan la fecha y la hora del recordatorio. Los atributos son los mismos que para las anteriores columnas. No se almacena como un campo de fecha, debido a que SQLite no tiene una clase de almacenamiento asociado con el almacenamiento de fechas y/o horas.


Creando la tabla de la base de datos

Anidado dentro del archivo “RemindersDbAdapter.java”, vamos a crear nuestra primera tabla de la base de datos con el siguiente código.

1  private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
3    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

6    @Override
7   public void onCreate(SQLiteDatabase db) {
8    db.execSQL(DATABASE_CREATE);
}

11   @Override
12  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}


En la línea 1 se implementa la aplicación de SQLiteOpenHelper.
En la línea 3 se llama al constructor de la base de datos SQLiteOpenHelper. La base de datos no se crea o abre realmente hasta que se llama con getReadableDatabase() o getWriteableDatabase().
En la línea 7 se llama al método onCreate(), cuando se crea la base por primera vez.
En la 8 está el código que crea la base de datos y la tabla de la base.
En la línea 12 está onUpgrade(), que se utiliza cuando se necesita actualizar una base de datos existente.

Como acabamos de ver, para crear la base de datos se llama a getReadableDatabase() o para modificarla a getWriteableDatabase() en el objeto DatabaseHelper.

Para ello vamos a escribir el siguiente código en el archivo “RemindersDbAdapter.java”:

public RemindersDbAdapter open() throws android.database.SQLException {
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDHelper.getWritableDatabase();
return this;
}

El método open() abre (y se crea si es necesario) la base de datos utilizando la clase DatabaseHelper() que acaba de crear. Esta clase con la palabra clave de Java “return”, tiene acceso a los datos cuando el usuario llama con las clases ReminderEditActivity o ReminderListActivity, siendo el método el que devuelve una instancia de la RemindersDbAdapter.

Cerrando la base de datos

La memoria en un teléfono móvil es importante, por lo que lo mejor que podemos hacer cuando no se necesita algo es cerrarlo. Por ello, una base de datos abierta es un recurso costoso de la memoria, por lo que cuando no esté en uso tenemos que cerrarla. Para cerrar una base de datos se utiliza el siguiente método que colocaremos en la clase RemindersDbAdapter, en cualquier parte, al final, por ejemplo:

Public void close() {
mDbHelper.close();
}


Colocado el método que cierra la base de datos, hay que llamarlo, y se hace desde dentro de la clase ReinderEditActivity cuando el usuario cancela la actividad utilizando el botón “atrás” del dispositivo.


Para cualquier duda que tengas sobre este ejemplo, cómprate el libro del que estoy sacando los apuntes. Lo puedes encontrar en internet en esta dirección:

http://eu.dummies.com/store/product/Android-Application-Development-For-Dummies.productCd-047077018X.html

Regreso al contenido | Regreso al menu principal