1

PersistentStoreBlackBerry アプリに10 個の文字列値を保存しようとしています。アイデアは、常に最新の 10 個の項目 (文字列値) を保存することです。最初の 10 個の値が保存され、11 番目の値が入力されると、次のようになります。

  • 最初のエントリを削除
  • 残りの 9 つのエントリを順序の上に移動します
  • 11 番目のエントリを 10 番目の値として保存します

これが私が従いたいロジックです。エントリが増え続けるにつれて、最新の 10 個の値となる最大 10 個のエントリを保存します。Stringメソッドで値を保存しようとしましたsaveChatMsg()

 public void saveChatMsg()
 {
     if(xx<10)
     {
         PersistentStoreHelper.persistentHashtable.put("chatMsg"+xx,chatToSave);
         xx=xx+1;
         if(xx==10)
         {
             PersistentStoreHelper.persistentHashtable.put("xxValue",Integer.toString(0));
         }
         else
         {
             PersistentStoreHelper.persistentHashtable.put("xxValue",Integer.toString(xx));
         }

     }
 }

ここで、xx は 0 から 9 までの int です。ただし、メッセージを保存している間、メッセージを取得すると時系列で表示されません。このメソッドは 4 つの異なる場所で呼び出されるため、保存された 10 個のメッセージは正しい順序ではありません。最新のメッセージは、10 ではなく 6 番目の値として表示される場合があります。実装方法についてコメントとアドバイスをお願いします。

4

1 に答える 1

1

10 件のメッセージのリストが必要な場合は、aVectorを使用します。ベクトルには順序があり、Persistable (*)です。ベクターから最初の (最も古い) 要素を削除し、最後に新しい要素を追加できます。

あなたの永続的なストアは 1 つのメインを保持しているようHashtableです (これは良いことです)。永続モデルを次のように変更します。

- Hashtable
    - Vector (key = "chatMsgs")
        - String
        - String
        - String
        - String
        - String
        - String
        - String
        - String
        - String
        - String

だから、多分このようなもの:

public void saveChatMsg(String newMsg) {
    Vector msgs = PersistentStoreHelper.persistentHashtable.get("chatMsgs");
    // add the new msg (to the end of the vector)
    msgs.addElement(newMsg);
    // delete old messages, if the vector is full
    while (msgs.size() > 10) {
        msgs.removeElementAt(0);
    }
    // store the modified vector back to the persistent store
    PersistentStoreHelper.persistentHashtable.put("chatMsgs", msgs);
    // I'm assuming your PersistentStoreHelper calls commit() somewhere in here
}

/** @param index - 0 is the oldest, 9 is the newest */
public String getChatMsg(int index) {
    Vector msgs = PersistentStoreHelper.persistentHashtable.get("chatMsgs");
    return (String)msgs.elementAt(index);
}

編集:

(*) リンク先の BlackBerry API ドキュメントと BlackBerry Java Storage API ドキュメントは、どちらもクラス としてリストjava.util.Vectorされています。この回答/コメントもそうです。ただし、実際の API javadoc には、 を実装しているとは記載されていません。私は今コードを実行する立場にありませんが、オブジェクトの が機能しない場合は、 ContentProtectedVectorのようなのサブクラスをいつでも使用できます。API ドキュメントでは として明示的にリストされています。他の人の利益のために、そうする必要がある場合はコメントを投稿してください。PersistableVectorPersistableVectorStringVectorPersistable

于 2013-03-31T21:37:06.597 に答える