Справка по обработке событий Java (уведомления против EventObjects) - PullRequest
0 голосов
/ 18 мая 2011

Я создаю приложение для Android и приложение Blackberry (одно и то же приложение для разных платформ). Я создаю абстрактный класс, который будет обрабатывать события. Например, я касаюсь кнопки «Сохранить» на Android, где публикуется уведомление / событие. Абстрактный класс получает это событие. Я нажимаю кнопку «Сохранить» на Blackberry, она делает то же самое.

Каков наилучший способ сделать это? Я посмотрел на EventObject, а также на MBeans и его классы уведомлений, но они кажутся слишком сложными. В target-c я просто регистрирую экземпляр класса для уведомлений с помощью центра уведомлений target-c, а затем в классе, который запускает уведомление, во время триггера мы делаем что-то вроде «postNotification». Есть ли что-нибудь простое в Java? Также мне нужно отправить Объекты с этими уведомлениями.

О, я полагаю, мы не можем использовать классы MBeans. Не входит в версию Blackberry Java.

Спасибо!

1 Ответ

1 голос
/ 19 мая 2011

В BlackBerry, если вы планируете генерировать эти события из элементов пользовательского интерфейса (ButtonField, ListField и т. Д.), Они все поставляются с Field.setChangeListener (FieldChangeListener), так что вам просто нужно подключить слушатель к этому. Если вы хотите, чтобы это было что-то, что реагирует на такие вещи, как ввод-вывод или обработка, вы можете использовать классы Event и EventListener для этого. Лично я думаю, что они немного больше, чем мне нужно для простых уведомлений, поэтому я обычно делаю свои собственные простые интерфейсы.

Допустим, у вас есть класс, расширяющий поток, который подключается к веб-службе для загрузки файла XML, в котором перечислены состояния и их столицы. и обрабатывает это. Вы можете создать интерфейс EventGenerator с абстрактными методами public void addEventHandler(EventHandler) и protected void notifyHandlers(Object obj). Внутри этого у вас есть Vector, в котором хранятся EventHandlers, через которые ваш notifyHandlers() может пройти цикл и отправить вызов на handler.handleEvent(Object). Когда вы закончите обработку данных, вы заключите их в объект Oject (может быть, Hashtable или пользовательский компонент States), мы назовем его states и внутренне вызовем notifyHandlers(states). Теперь, когда вы проходите через каждый EventHandler, вы звоните handler.handleEvent(states). Вы можете подумать о том, чтобы сделать попытку / перехватить каждый вызов, чтобы один EventHandler не препятствовал их запуску.

Итак, на EventHandlers. Это еще один интерфейс с абстрактным методом public void handleEvent(Object obj). Скажем, у вас есть экран, который после получения states отобразит их в списке. Этот экран будет реализовывать EventHandler, а затем зарегистрировать себя в EventGenerator, используя generator.addEventHandler(this). Всякий раз, когда обработка завершается, вызывается этот метод, и вы можете делать все, что захотите, с возвращаемым объектом.

Добавление, которое вы можете реализовать, - это изменение public void handleEvent(Object obj) на public boolean handleEvent(Object obj) и, подобно методам навигации в BB, возвращать true, если событие было обработано, и ничто больше не должно пытаться его обработать.

...