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.
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.