2012-06-30 64 views
3

我想將我的LWUIT應用程序移植到Codename one如何使用Codename one Storage?

我已經在LWUIT中使用了RMS,現在顯然我必須將其轉換爲存儲。

我不明白Storage類在代碼名稱1中的工作方式,代碼名稱1的文檔也沒有任何內容。

1)什麼是存儲文件的結構?

- >在J2ME RecordStore中,您將記錄聚集在一起,就像表格一樣。每一行都對應一條記錄。每條記錄都有唯一的記錄標識,您可以使用此記錄標識訪問記錄。每條記錄都可以存儲一些數據。

這是如何映射到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)。 ;然而,在代碼名稱1中沒有init!如何在Codename中打開一個存儲? 3)如果我嘗試打開一個不存在的存儲文件,會發生什麼情況(RMS會發生異常)?

回答

6

考慮存儲的最簡單方法是作爲平面文件系統(沒有目錄/文件夾)。

在RMS之上運行時,此文件系統抽象將無縫地映射到RMS數據庫。

請注意,init()在Codename One中的存儲不再是必需的,在LWUIT下它只執行基本的初始化,並且名稱通常被忽略。

的存儲類有幾種方法:

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 
+0

太好了!謝謝。 – Nikhil