4

LWUIT アプリケーションをCodename oneに移植しようとしています。

LWUIT で RMS を使用したことがありますが、明らかにこれをストレージに変換する必要があります。

Codename 1 で Storage クラスがどのように機能するかがわかりません。また、Codename 1 のドキュメントにも何もありません。

1) ストレージファイルの構造は?

--> J2MERecordStoreでは、テーブルのようにまとめられたレコードがあります。すべての行は、レコードに対応します。各レコードには一意のレコード 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) のようなものでした。; ただし、コードネーム one には init がありません!!!. Codename one のストレージを開くにはどうすればよいですか??

3) 存在しないストレージ ファイルを開こうとするとどうなりますか (RMS では例外が発生します)。

4

1 に答える 1

7

ストレージについて考える最も簡単な方法は、フラット ファイル システム (ディレクトリ/フォルダーなし) です。

RMS 上で実行すると、このファイル システムの抽象化が RMS データベースにシームレスにマップされます。

init()Codename One の Storage では不要になったことに注意してください。LWUIT では、基本的な初期化のみが実行され、名前は通常無視されました。

Storage クラスにはいくつかのメソッドがあります。

InputStream createInputStream(String name)

指定されたストレージ ソース ファイルへの入力ストリームを作成します

OutputStream    createOutputStream(String name)

指定された名前のストレージへの出力ストリームを作成します

boolean     exists(String name)

指定されたストレージ ファイルが存在する場合は true を返します

String[]    listEntries()

ストレージ ファイルの名前を一覧表示します

これらを使用して、データが存在するかどうかを保存して確認することができます。ただし、次の 2 つの方法を使用して、入出力ストリームを使用せずに複雑なオブジェクトをストレージに格納することもできます。

 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
于 2012-06-30T17:57:38.683 に答える