У меня есть приложение BlackBerry, которое отправляет сообщения на сервер с фиксированными интервалами. Сообщения отправляются через веб-службу с использованием любого из доступных способов подключения; Wi-Fi, BIS, TCP/IP и т. Д.BlackBerry - запись и чтение из постоянного объекта vector
Поскольку сообщения отправляются непрерывно, мне нужен механизм для очереди сообщений в случае недоступности интернета и отправки сообщений в случае доступности Интернета. По этой причине я хочу сначала сохранить любое исходящее сообщение в Persistent Store, а затем прочитать Persistent Store и пропустить его, чтобы отправить все ожидающие сообщения. Любое новое сообщение должно быть сохранено на последнем месте в Постоянном хранилище.
Я называю эти два метода ниже, когда «Отправить» щелкают:
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++;
}
}
Это просто попытка из учебники/примеры, которые я наткнулся. Незлая помощь.
спасибо. Идея состоит в том, чтобы сначала сохранить каждое сообщение, а затем пропустить вектор для отправки каждого сообщения. Я попробовал ваш код выше, добавив мой код отправки сообщения с ним. Ничего не произошло. По какой-то причине моя отладка работает неправильно, поэтому я не знаю точной строки, где возникает ошибка. Но я проверил сервер, и сообщения не проходят.Несмотря на то, что я нажал кнопку «Отправить» с отключенным Wi-Fi, убедитесь, что вектор уже имеет две записи, прежде чем третье сообщение будет поставлено в очередь для отправки с включенным Wi-Fi. Какая, по-видимому, причина? – Sarah
@Sarah, если у вас есть какие-либо проблемы с кодом отправки, это будет отдельной проблемой. Опять же, я взял этот код из приведенного выше примера, чтобы сосредоточиться на проблеме сохранения очереди сообщений. Я бы порекомендовал сначала удалить весь код PersistentObject. Внесите 'sendMessage()' так, чтобы он просто отправил ** одно ** сообщение. Убедитесь, что он работает первым, чтобы получить сообщение на ваш сервер. Как только это будет работать, добавьте обратно в код PersistentObject. И я бы наверняка работал над тем, чтобы вернуть ваши возможности отладки, так как это поможет и всему остальному. – Nate