martes, 27 de abril de 2010

Iniciación a J2ME Parte III

Record Management Store
MID no permite el acceso a ficheros, ni por lo tanto, crear archivos nuevos. Como hacer entonces para guardar la lista de mejores puntuaciones en un juego? Facil, usando la API rms, en javax.microedition.rms.
Rms proporciona una pequeña base de datos con el siguiente formato


ID


Informacion


1

Info


2

Info


...

...
Muy sencilla, pero que sirve para nuestros propósitos.
Esta base de datos solo puede ser usada por nuestra aplicación, solo puede ser compartida con otras aplicaciones, si estas, se encuentran empaquetadas en el mismo MIDlet suite, o lo que es lo mismo, en el mismo .jar (java archive file).
Cada ID es única, y se asignan consecutivamente. Si tenemos registros del 1 al 10 y borramos el 3, al añadir un nuevo registro no se le asigna el numero 3, sino, el numero 11. 
Si intentamos usar el registro numero 3, obtendremos un error del tipo
javax.microedition.rms.InvalidRecordIDException.
Así que, como saber si han sido borrados registros sin llevar un control en otra base de datos? Muy fácil, usando la clase RecordEnumeration que veremos mas adelante.

Clases mas importantes usadas por RMS
RecordStore
Esta clase proporciona una forma para crear o abrir el registro de datos mediante openRecordStore(). Tambien facilita otros metodos, como closeRecordStore() o deleteRecordStore(), para cerrar y borrar respectivamente. Nota: no se puede borrar un RecordStore si se esta usando, o lo que es lo mismo, hay que cerrarlo para borrarlo.
Para trabajar con los registros existen los siguientes métodos:
  • getNextRecordID(): proporcional el ID en donde el siguiente registro va a ser añadido
  • addRecord(): para añadir registros
  • deleteRecord(): para borrar registros
  • getRecord(): consigue la información del registro
  • getNumRecords(): proporciona el numero de registros
Otros métodos son:
  • getVersion()
  • getLastModified()
  • getSizeAvailable()
  • getSize()
  • listRecordStores()
Como muchos otros componentes, RecordStore posee un listener para saber cuando se ha modificado (RecordListener) usando los métodos:
  • addRecordListener()
  • removeRecordListener()
Existen todavía otras clases para facilitarnos el uso del RMS.
RecordFilter
Permite realizar una búsqueda usando nuestro propio criterio de búsqueda usando el método matches().
RecordComparator
Usando el método compare() compara dos registros.
RecordEnumerator
Muy útil ya que facilita como una segunda base de datos totalmente secuencial a partir de nuestro RecordStore original, pudiendo así hacer un for loop y por ejemplo, mostrar todos los registros. A continuación, un ejemplo:
try {
System.out.println("Numero de registros: " + recStore.getNumRecords());

if (recStore.getNumRecords() > 0) {
RecordEnumeration re = recStore.enumerateRecords(null, null, false);

while (re.hasNextElement()) {
String str = new String(re.nextRecord());

System.out.println("Registro: " + str);
}
}
} catch (Exception e) {
System.err.println(e.toString());
}
Ejemplo:
Este ejemplo hace uso del RMS, es un pequeño memorando. Permite registrar texto, con distinto tipo de letra, y luego muestra todos los registros en un canvas. Como el canvas no tiene barras de desplazamiento, solo muestra aquellas que caben.

No hay comentarios:

Publicar un comentario