executeOfflineCommand пропускает команду при выполнении из хранилища на Android - PullRequest
0 голосов
/ 29 июня 2018

Я должен выполнить команды «Старт» и «Завершить» в последовательном порядке в моей программе и синхронизировать все в конце. Поэтому я сначала вставляю команды Offline в порядке и предполагаю, что они будут выполняться в том же порядке. Я использую «Список» с «Итератором» для этого.

Проблема здесь в следующем: команда Finish будет пропущена при выполнении в некоторых странных сценариях посередине, и команды «start» будут выполняться рядом друг с другом, посылая все неверные данные и отображая их неверным образом.

Поскольку действие получит идентификатор при выполнении команды на сервере, я сохраняю временные идентификаторы для сопоставления автономных команд в хранилище (localID). Instaead of List, если я использую любую другую коллекцию, это станет лучше? Трудно воспроизвести это на симуляторе. Пожалуйста, просмотрите оба сценария и посоветуйте, где этот подход может пойти не так. Спасибо

Я добавлю OfflineCommands в список и сохраню в хранилище. После этого пользователь может выполнить операцию удаления удалить в приложении, чтобы я получил список и удалил команды, которые были удалены из хранилища, так что теперь я отфильтровал список.

1 Ответ

0 голосов
/ 29 июня 2018

Не синхронизировать.

Это почти всегда ошибка в Codename One. Ваш код имеет дело с пользовательским интерфейсом, поэтому он должен быть на EDT, а Display.getInstance().isEDT() должно быть истинным.

Я предполагаю, что одна из команд в середине использует одно из следующих invokeAndBlock() производных:

  • addToQueueAndWait
  • Модальные диалоги

Который запускает второй раунд синхронизации для запуска.

Вы можете отследить это, воспроизведя проблему и проверив, какая команда в списке присутствует в каждом конкретном случае. Затем исправьте эту команду, чтобы она не блокировалась таким образом.

Еще один подход к его исправлению заключается в немедленном удалении списка при запуске обработки, что предотвратит повторное выполнение команд.

...