Мое приложение CN1 использует XFClient для связи с базой данных mySQL на сервере, на котором работает Xataface. Поток таймера вызывает метод findAndWait XFClient и затем засыпает 1 секунду перед повторением. Он работает хорошо в 99 +% случаев, но иногда приложение сталкивается с сетевой проблемой (Bad Gateway, ConnectionExceptions, SocketTimeOutException и т. Д. c.) И перестает взаимодействовать с сервером, потому что findAndWait продолжает ждать, несмотря на исключение. Есть ли способ для findAndWait прекратить ожидание при возникновении исключения?
Вот что я пробовал до сих пор:
- принять ошибку. Это подавляет сообщение об ошибке пользователю, но findAndWait продолжает ждать
- Request.setTimeout (5000), чтобы выйти через 5 секунд (на основе SocketTimeoutException в сборке CodeNameOne на Android устройстве ) . Нет эффекта. FindAndWait продолжает ждать. Пробовал это в NetworkManager и на уровне запроса.
В handleException для NetworkManager добавлен код ниже (на основе https://github.com/codenameone/CodenameOne/issues/733). Он скомпилирован и запущен, но findAndWait продолжал ждать.
NetworkManager.getInstance().addErrorListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
System.out.println("got a network error. will kill the connect request and consume it.");
if (theXFClient.getcRMP() != null) {
NetworkManager.getInstance().killAndWait(theXFClient.getcRMP());
}
evt.consume();
}
});
Я запускаю это на симуляторе, запускаю приложение и затем вызываю проблему, отключив сетевое соединение в меню симулятора . Я надеялся, что поток таймера продолжится, когда я снова включу сетевое соединение, но он все еще остановлен.
BTW - Когда приложение приостанавливается и возобновляется через меню симулятора (и на реальных устройствах), таймер возобновляется с того места, где он остановился. Надеемся, что мы сможем найти способ сделать это и при сбоях сети.
Спасибо, Майк