如何使用Codename One存储?

4

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

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

我不明白Codename one中Storage类的工作原理,而且codename one的文档也没有任何相关内容。

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

--> 在J2ME的RecordStore中,您可以将记录捆绑在一起形成表格。每一行对应一个记录。每个记录都有唯一的记录ID,您可以使用此记录ID访问记录。每个记录可以存储一些数据。

这如何映射到Storage类?

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)。然而,在Codename One中没有init!我该如何打开一个Storage?

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

1个回答

8

存储的最简单理解方式是一个扁平的文件系统(没有目录/文件夹)。

在运行时,当使用RMS时,这个文件系统抽象会无缝地映射到RMS数据库中。

请注意,在Codename One中,Storage的init()方法不再必要,它只执行基本初始化,并且通常被忽略。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接