¿Cómo usar Codename one Storage?

Estoy intentando portar mi aplicación LWUIT a Nombre en clave uno.

He usado RMS en LWUIT y ahora obviamente tengo que transformar esto en Almacenamiento.

No entiendo cómo funciona la clase Storage en Codename one y la documentación para codename one tampoco tiene nada al respecto.

1) ¿Cuál es la estructura de un archivo de almacenamiento?

--> En J2ME RecordStore , tiene registros agrupados como una tabla. Cada fila, corresponde a un registro. Cada registro tiene una identificación de registro única y puede acceder al registro con esta identificación de registro. Cada registro puede tener algunos datos almacenados en él.

¿Cómo se relaciona esto con la clase de almacenamiento?

2) Deseo almacenar algunos registros en mi almacenamiento, ¿cómo lo hago?

La documentación dice:

static Storage  getInstance() 
          Returns the storage instance or null if the storage wasn't initialized using a call to init(String) first.

--> En LWUIT era algo así como Storage.init(storageName). ; Sin embargo, no hay init en el nombre en clave uno!!!. ¿Cómo abro un almacenamiento en Codename uno?

3) Si trato de abrir un archivo de almacenamiento que no existe, ¿qué pasará (RMS da una excepción)?

preguntado el 30 de junio de 12 a las 18:06

1 Respuestas

La forma más fácil de pensar en el almacenamiento es como un sistema de archivos plano (sin directorios/carpetas).

Cuando se ejecuta sobre RMS, esta abstracción del sistema de archivos se asigna a la base de datos de RMS sin inconvenientes para usted.

Darse cuenta de init() para el almacenamiento en Codename One ya no es necesario, bajo LWUIT solo realizó la inicialización básica y el nombre generalmente se ignoró.

La clase Storage tiene varios métodos:

InputStream createInputStream(String name)

Crea un flujo de entrada para el archivo fuente de almacenamiento dado

OutputStream    createOutputStream(String name)

Crea un flujo de salida al almacenamiento con el nombre dado

boolean     exists(String name)

Devuelve verdadero si el archivo de almacenamiento dado existe

String[]    listEntries()

Enumera los nombres de los archivos de almacenamiento

Puede usarlos solo para almacenar y verificar si existen datos. Sin embargo, también puede almacenar objetos complejos en almacenamiento sin usar flujos de entrada/salida usando estos dos métodos:

 Object     readObject(String name)

Lee el objeto del almacenamiento, devuelve nulo si el objeto no está allí

 boolean    writeObject(String name, Object o)

Escribe el objeto dado en el almacenamiento asumiendo que es un tipo externalizable o uno de los tipos admitidos

Entonces, para simular algo como el almacenamiento de bytes [], puede hacer algo como esto:

Vector p = new Vector();
byte[] myData = ...;
p.addElement(myData);
p.addElement(additionalData);
Storage.getInstance().writeObject("myStore", p);

Entonces solo léelo como:

Vector p = (Vector)Storage.getInstance().read("myStore");
// p will be null if nothing was written

Respondido el 30 de junio de 12 a las 18:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.