我正在尝试在我的BlackBerry App中的PersistentStore
中保存10个字符串值。这个想法是在任何给定的时间保存最新的10项(字符串值)。保存前10个值并输入第11个值时,它应该:
这是我想要遵循的逻辑。随着条目不断增加,我将存储最多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个等。请评论并建议如何实现。
答案 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
String
个Vector
个对象对您不起作用,则可以始终使用Persistable
的子类,如ContentProtectedVector,API文档明确列为{{1}}。发表评论如果你最终需要这样做,为了别人的利益。