martes, 30 de diciembre de 2014

TEMA #15: RMS

Cuando creamos nuestras aplicaciones/juegos utilizamos datos, los cuales pueden ser siempre los mismos o cambiar, lo más probable es que hagamos aplicaciones/juegos que necesiten guardar ciertos datos y mostrarlos cuando se necesiten. Durante todo el curso te hemos dado las herramientas para hacer tus propias aplicaciones/juegos o quizás compartirlas con alguien más.

Ahora bien, cuando salimos de nuestras aplicaciones, ya sea al pulsar el botón salir de nuestra aplicación/juego, o si al estar usando la aplicación/juego nuestro celular se queda sin batería y se apaga, todos los datos que hayan sido modificados durante el uso de la aplicación/juego se borrarán, y esto no es un error, sino que nuestro celular, en cuanto a J2ME, no dispone de una memoria predeterminada. Para esto es necesario utilizar el Record Management System (RMS), que nos permitirá guardar la información, aún si salimos de la aplicación/juego o si nuestro celular se apaga.

Supongamos por ejemplo que tenemos un juego de aviones y que el puntaje más alto del jugador se almacena en una variable de tipo int que inicialmente es cero. Si no utilizamos el RMS, cuando cerremos nuestro juego y lo volvamos a abrir el valor de esta variable será cero; sin embargo, si utilizamos el RMS podemos guardar este valor para que esté disponible la próxima vez que utilicemos nuestra aplicación.

Para utilizar el RMS es necesario importar el paquete javax.microedition.rms; que nos proporcionará el elemento RecordStore que va a ser el pilar de este tema.

La excepción que debemos atrapar en algunas ocasiones cuando usemos el RMS es RecordStoreException.

Para explicar el Record Management System (RMS) lo dividiremos en cinco partes:
  • Abrir, cerrar y eliminar un RecordStore.
  • Añadir un registro al RecordStore.
  • Leer un registro del RecordStore.
  • Organizar los registros de un RecordStore.
  • Borrar registros de un RecordStore.


Abrir, Cerrar y Eliminar Un RecordStore
Para poder almacenar nuestros datos necesitamos crear un RecordStore que es el encargado de todo.
1
RecordStore rs = RecordStore.openRecordStore(String nombre, boolean nuevo);
2
rs.closeRecordStore();
3
RecordStore.deleteRecordStore(String nombre);

En la línea número 1 vemos cómo crear un recordStore. Los parámetros que debeos proporcionar son: el nombre que le queremos colocar al RecordStore, y el segundo parámetro va a determinar si se debe crear un RecordStore en caso de que no exista uno con el mismo nombre (true), o no (false).

En la línea número 2 vemos cómo cerrar un RecordStore. Esto lo debemos hacer cuando terminemos de usar el RecordStore para que los datos se guarden correctamente.

En el caso de eliminar un RecordStore (línea 3), debemos especificar el nombre del RecordStore que queremos eliminar.



Añadir Un Registro Al RecordStore
Los datos que se pueden guardar en un RecordStore pueden ser simples (de un tipo) o complejos (de varios tipos). En este caso vamos a almacenar datos simples. Veamos cómo los añadimos al RecordStore:
byte[] datos;

try{
      int id = rs.addRecord(byte[] datos, int inicio, int número);
}catch(RecordStoreException rse){}

El primer parámetro que debemos proporcionar son los datos, en forma de un array de bytes, el segundo parámetro indica desde qué posición del array se comenzará a almacenar en el RecordStore, y el último parámetro indica cuántos valores, desde el inicio, se guardarán. Debemos guardar el identificador que resulta cuando añadimos un registro, en este caso la variable id se encargará de hacerlo. Nótese que debemos atrapar el error.

Algo importante en este paso es que podemos almacenar tanto datos numéricos como de tipo String, lo que debemos hacer es convertirlo a bytes a través del método .getBytes();. En el código que se ofrece al final se explica esto.



Leer Un Registro Del RecordStore
Para leer un registro debemos conocer el identificador (el que obtuvimos al añadir el registro a través de .addRecord();), sin embargo, en el siguiente punto vamos a ver cómo podemos saber el identificador de cada registro más fácilmente.
byte[] datos;

try{
      datos = rs.getRecord(int id);
}catch(RecordStoreException rse){}



Organizar Los Registros De Un RecordStore
Para organizar los registros disponemos de RecordEnumeration.
RecordEnumeration re = rs.enumerateRecords(RecordFilter rf, RecordComparator rc, boolean act);

El parámetro act hace que se actualice la información contenida en el RecordEnumeration cuando se añade o se borra un dato del RecordStore. Los otros dos parámetros no son importantes, para efectos de este curso.

De esta manera conocemos los identificadores de los registros que están en el RecordStore:
try{
      re = rs.enumerateRecords(null, null, true);
      while(re.hasNextElement()){
            System.out.println(re.nextRecordId());
      }
}catch(RecordStoreException rse){}

Aquí vemos otros dos métodos que no habíamos mencionado: .hasNextElement() que nos devolverá el valor true si hay un próximo elemento para leer, y .nextRecordId() que obtiene el identificador del registro. En este caso hemos colocado que el identificador del registro se muestre en la consola de salida del emulador de nuestra computadora (System.out.println(...)). Podemos acceder a la consola de salida del emulador entrando en el menú View --> Output console.



Borrar Registros De Un RecordStore
Hay un método utilizado para borrar los registros de un recordStore:
rs.deleteRecord(int id);

Debemos conocer el identificador (id) del registro que queremos borrar, o lo podemos obtener como habíamos mencionado anteriormente, a través de RecordEnumeration. Cuando queramos borrar todos los registros que están contenidos en un RecordStore lo que hacemos es borrar el RecordStore (.deleteRecordStore(String nombre);), sin embargo, si lo que queremos es borrar los registros que están dentro del RecordStore sin eliminar el RecordStore, usamos las siguientes líneas de código:
RecordEnumeration recEnum = rs.enumerateRecords(null, null, false);
while(recEnum.hasNextElement()){
      rs.deleteRecord(recEnum.nextRecordId());
}

El resto de las cosas que podemos hacer con un RecordStore las vamos a descubrir con la práctica. Descarga la aplicación de ejemplo para que veas el funcionamiento del RMS y que los datos guardados persisten a pesar de salirte de la aplicación. También puedes descargar el código y ver cómo se hace todo el proceso.

Aplicación de ejemplo RMS. Descargar App.
Descargar el código y los recursos utilizados en la aplicación. Descargar.

Hasta aquí ha finalizado nuestro curso, por ahora. Si nos has acompañado durante todo el camino hasta aquí ya sabes lo básico para empezar a hacer tus aplicaciones/juegos. Posteriormente se publicarán nuevos temas.

Disfruta lo que aprendiste =) Cualquier comentario o sugerencia no olvides escribir en la sección de comentarios.

No hay comentarios.:

Publicar un comentario