我正在尝试将我的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给出例外)?
答案 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