Blackberry 持久存储—保存、读取和覆盖数据
我正试图在我的黑莓应用程序中的Blackberry 持久存储—保存、读取和覆盖数据,blackberry,persistent,overwrite,persistent-storage,Blackberry,Persistent,Overwrite,Persistent Storage,我正试图在我的黑莓应用程序中的PersistentStore中保存10个字符串值。其思想是在任何给定时间保存最新的10项(字符串值)。保存前10个值并键入第11个值时,应: 删除第一个条目 将其余9项移到订单上方 将第11个条目保存为第10个值 这就是我想遵循的逻辑。随着条目不断增加,我将最多存储10个条目,这将是最新的10个值。我尝试通过saveChatMsg()方法保存String值: public void saveChatMsg() { 如果(xx如果你想要一个包含10条消息的列表,
PersistentStore
中保存10个字符串值。其思想是在任何给定时间保存最新的10项(字符串值)。保存前10个值并键入第11个值时,应:
- 删除第一个条目
- 将其余9项移到订单上方
- 将第11个条目保存为第10个值
saveChatMsg()
方法保存String
值:
public void saveChatMsg()
{
如果(xx如果你想要一个包含10条消息的列表,我会使用一个向量
。向量有一个顺序。你可以从向量中删除第一个(最早的)元素,并在末尾添加一个新的元素
看起来您的持久化存储保留了一个主哈希表(这很好)。请将您的持久化模型更改为如下所示:
- Hashtable
- Vector (key = "chatMsgs")
- String
- String
- String
- String
- String
- String
- String
- String
- String
- String
所以,也许是这样的:
- Hashtable
- Vector (key = "chatMsgs")
- String
- String
- String
- String
- String
- String
- String
- String
- String
- String
public void saveChatMsg(字符串newMsg){
Vector msgs=persistentstoreheloper.persistenthastable.get(“chatMsgs”);
//添加新消息(到向量末尾)
msgs.addElement(newMsg);
//如果向量已满,请删除旧邮件
而(msgs.size()>10){
msgs.removeElementAt(0);
}
//将修改后的向量存储回持久存储
persistentstoreheloper.persistenthastable.put(“chatMsgs”,msgs);
//我假设您的PersistentStoreHelper在这里的某个地方调用commit()
}
/**@param index-0是最早的,9是最新的*/
公共字符串getChatMsg(int索引){
Vector msgs=persistentstoreheloper.persistenthastable.get(“chatMsgs”);
返回(字符串)msgs.elementAt(索引);
}
编辑:
(*)我链接到的BlackBerry API文档和BlackBerry Java Storage API文档都将Java.util.Vector
列为一个Persistable
类。然而,Vector
的实际API javadoc并没有说它实现了Persistable
。我现在无法运行代码,但是如果String
对象的Vector
不适合您,您可以始终使用Vector
的子类,比如API文档明确列出为可持久的。如果您需要这样做,为了其他人的利益,请发表评论。如果您想要10条消息的列表,我会使用Vector
。向量的顺序为。您可以从向量中删除第一个(最早的)元素,然后在末尾添加一个新元素
看起来您的持久化存储保留了一个主哈希表(这很好)。请将您的持久化模型更改为如下所示:
- Hashtable
- Vector (key = "chatMsgs")
- String
- String
- String
- String
- String
- String
- String
- String
- String
- String
所以,也许是这样的:
- Hashtable
- Vector (key = "chatMsgs")
- String
- String
- String
- String
- String
- String
- String
- String
- String
- String
public void saveChatMsg(字符串newMsg){
Vector msgs=persistentstoreheloper.persistenthastable.get(“chatMsgs”);
//添加新消息(到向量末尾)
msgs.addElement(newMsg);
//如果向量已满,请删除旧邮件
而(msgs.size()>10){
msgs.removeElementAt(0);
}
//将修改后的向量存储回持久存储
persistentstoreheloper.persistenthastable.put(“chatMsgs”,msgs);
//我假设您的PersistentStoreHelper在这里的某个地方调用commit()
}
/**@param index-0是最早的,9是最新的*/
公共字符串getChatMsg(int索引){
Vector msgs=persistentstoreheloper.persistenthastable.get(“chatMsgs”);
返回(字符串)msgs.elementAt(索引);
}
编辑:
(*)我链接到的BlackBerry API文档和BlackBerry Java Storage API文档都将Java.util.Vector
列为一个Persistable
类。然而,Vector
的实际API javadoc并没有说它实现了Persistable
。我现在无法运行代码,但是如果String
对象的Vector
不适用于您,您可以始终使用Vector
的子类,比如API文档明确列出为Persistable
。如果您最终需要这样做,为了其他人的利益,请发表评论。谢谢。这很有帮助。但是,我遇到了一个关于Persistable的问题当删除/卸载应用程序并重新安装时,保存为永久性的字符串值不会被删除。在这里问这个问题可以吗?还是我应该作为一个单独的问题来解决这个问题?我在这里问这个问题是因为我保存为永久性的字符串值。什么是“chatMsgs”在这行代码中:Vector msgs=persistentstoreheloper.persistentHashtable.get(“chatMsgs”)。我需要在PersistentStore类中创建一个向量吗?@Sarah,是的,正如你在上面的小图中看到的,你应该在PersistentStore中放入一个哈希表。哈希表中应该有一个向量,向量中应该有10个字符串。因此,无论你在哪里初始化PersistentStore,你都会为键插入一个向量“chatMsgs”
,而不是存储10个字符串对象,它们都有自己的键(“chatMsg00”
,“chatMsg01”
,等等)@Sarah,关于你的第一个问题,或者。如果你想删除它,让你的哈希表成为你自己的子类(例如,公共类SarahsHashtable扩展Hashtable实现持久化{
)。我从未在持久性存储中使用过向量。“chatMsgs”是键的长值吗?这有意义吗;'public void saveChatMsg1(String newMsg){final long key=0x9df9f961bc6dal;Vector msgs=(Vector)persistentstoreheloper.persistenthastable.get(key);//如果(msgs==null){msgs=new Vector();PersistentStoreHelper.persistentObject.setContents(msgs);Persistent