持久存储 - 保存,读取和覆盖数据

时间:2013-03-31 11:20:45

标签: blackberry persistent overwrite persistent-storage

我正在尝试在我的BlackBerry App中的PersistentStore中保存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条消息的顺序不正确;最新消息可能显示为第6个值而不是10个等。请评论并建议如何实现。

1 个答案:

答案 0 :(得分:1)

如果你想要一个包含10条消息的列表,我会使用Vector。向量具有顺序and they are Persistable (*)。您可以从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 API文档都将java.util.Vector列为Persistable类。 So does this answer/comment。但是,Vector的实际API javadoc并未说明它实现了Persistable。我现在无法运行代码,但如果Vector StringVector个对象对您不起作用,则可以始终使用Persistable的子类,如ContentProtectedVector,API文档明确列为{{1}}。发表评论如果你最终需要这样做,为了别人的利益。