1

我正在尝试PersistentStore在我的 BlackBerry 应用程序中保存 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 的整数。但是,虽然这是保存消息,但当我检索消息时,它不会按时间顺序显示。此方法在 4 个不同的地方调用,因此保存的 10 条消息的顺序不正确;最新消息可能会显示为第 6 个值而不是 10 等。请评论并建议如何实施。

4

1 回答 1

1

如果你想要一个包含 10 条消息的列表,我会使用 a Vector。向量对它们有顺序它们是可持久的 (*)。您可以从 Vector 中删除第一个(最旧的)元素,并在末尾添加一个新元素。

看起来您的持久存储保留了一个主存储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 APIs 文档都java.util.Vector作为一个Persistable类列出。 这个答案/评论也是如此。但是,实际的 API javadocVector并没有说它实现了Persistable. 我现在无法运行代码,但是如果 a VectorofString对象对您不起作用,您始终可以使用API 文档明确列出的 的子类Vector,例如ContentProtectedVectorPersistable。如果您最终需要这样做,请发表评论,以使他人受益。

于 2013-03-31T21:37:06.597 回答