我有一个BlackBerry应用程序,它以固定的时间间隔向服务器发送消息。消息通过使用任何可用连接方法的Web服务发送; WIFI,BIS,TCP/IP等。BlackBerry - 从持久对象向量中写入和读取
由于消息是不断发送的,我需要一种机制来排队消息,以防万一互联网不可用,并在互联网可用时发送消息。出于这个原因,我希望首先将任何传出的消息保存在持久存储中,然后读取持久存储,并通过它循环发送所有未决消息。任何新消息应保存在持久存储的最后一个位置。
我打电话时,下面的“发送”这两种方法是点击:
public static void saveMessage(String msg){
Hashtable hashtable=new Hashtable();
persistentObject = PersistentStore.getPersistentObject(KEY);
hashtable.put("MessageToSend", msg);
persistentObject.commit();
}
public static void sendMessage(String msg){
Hashtable hashtable=new Hashtable();
persistentObject = PersistentStore.getPersistentObject(KEY);
Vector msgVector = (Vector)persistentObject.getContents();
Enumeration eMsgs=msgVector.elements();;
/*synchronized(poObject)*/{
persistentObject.setContents(msgVector);
persistentObject.commit();
}
int i=0;
while(eMsgs.hasMoreElements()){
hashtable=(Hashtable)eMsgs.nextElement();
String encryptedMessage=(String)hashtable.get("MessageToSend");
if(!encryptedMessage.equals("")){
//check internet connection
String C0NNECTION_EXTENSION = checkInternetConnection();
if(C0NNECTION_EXTENSION==null)
{
Dialog.alert("Check internet connection and try again");
return;
}
else
{
MyScreen.PostMsgToServer(encryptedMessage);
hashtable.remove(encryptedMessage);
}
}
i++;
}
}
这只是从我碰到教程/实例的尝试。请帮助。
谢谢。这个想法是首先存储每条消息,然后通过向量循环发送每条消息。我通过添加发送消息的代码来尝试上面的代码。什么都没发生。出于某种原因,我的调试工作不正常,所以我不知道错误来自哪里。但我检查了服务器,并且消息没有通过。尽管如此,我点击了关闭Wifi的发送,以确保在第三条消息排队等待Wifi发送开启之前,向量已经有两个条目。什么似乎是原因? – Sarah 2013-02-13 11:33:45
@Sarah,以及如果您的发送代码中有任何问题,那将是一个单独的问题。再次,我从上面的例子中拿出了这些代码,只关注保存消息队列的问题。我会建议先删除所有的PersistentObject代码。实现'sendMessage()',以便它直接发送**一条**消息。确保首先工作,将消息传递到服务器。一旦这个工作,然后加回PersistentObject代码。而且,我一定会努力恢复调试能力,因为这对其他所有方面都有帮助。 – Nate 2013-02-13 21:39:31