如何使用Codename one Storage?

时间:2012-06-30 17:06:34

标签: java-me lwuit codenameone

我正在尝试将我的LWUIT应用程序移植到Codename one

我在LWUIT中使用了RMS,现在显然我必须将其转换为存储。

我不明白Storage Class如何在Codename中工作,而codename one的文档也没有任何关系。

1)存储文件的结构是什么?

- >在J2ME RecordStore中,您将记录像表一样聚集在一起。每一行,对应一条记录。每条记录都有唯一的记录ID,您可以使用此记录ID访问记录。每条记录都可以存储一些数据。

这如何映射到存储类?

2)我希望在我的存储中存储一些记录,我该怎么做?

文档说:

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

- >在LWUIT中,它就像Storage.init(storageName)。 ;然而,代号为1的init没有!如何在Codename中打开存储?

3)如果我尝试打开一个不存在的存储文件,会发生什么(RMS给出例外)?

1 个答案:

答案 0 :(得分:6)

考虑存储的最简单方法是作为平面文件系统(没有目录/文件夹)。

在RMS上运行时,此文件系统抽象将无缝地映射到RMS数据库。

请注意,不再需要在Codename One中存储init(),在LWUIT下它只执行基本初始化,并且通常忽略该名称。

Storage类有几种方法:

InputStream createInputStream(String name)

创建给定存储源文件的输入流

OutputStream    createOutputStream(String name)

使用给定名称

创建存储的输出流
boolean     exists(String name)

如果给定的存储文件存在,则返回true

String[]    listEntries()

列出存储文件的名称

您可以使用它们来存储和检查数据是否存在。但是,您也可以使用以下两种方法在不使用输入/输出流的情况下将复杂对象存储在存储中:

 Object     readObject(String name)

从存储中读取对象,如果对象不存在则返回null

 boolean    writeObject(String name, Object o)

将给定对象写入存储,假设它是可外部化类型或支持类型之一

因此,要模拟像byte []存储这样的东西,你可以这样做:

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

然后将其读作:

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