我有一個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