Лучшая реализация метода обратного вызова для обновления нескольких полей - PullRequest
1 голос
/ 10 октября 2010

Я занимаюсь разработкой мобильного приложения (BlackBerry) с Java, которое использует API Google Translate. Я настроил его так, чтобы пользователь мог указать язык перед входом в систему, а затем, как только он вошел в систему, у меня есть обертки вокруг каждого фрагмента текста, отображаемого на экране, который будет переводить текст на основе выбранного языка.

Моя проблема в том, что на данном экране нужно перевести несколько вещей. Поэтому мне приходится обращаться к Google Translate API несколько раз за экран. Для этого я открываю HTTPConnection в новом потоке. Поэтому я передаю свой интерфейс экрана классу Translator, а затем класс Translator будет вызывать мои методы обратного вызова для этого экрана (requestSucceeded () или requestFailed ()).

Теперь, допустим, я перевожу как заголовок экрана, так и основной текст экрана. Это две отдельные HTTPConnections. Поэтому, когда заголовок переведен, я хочу, чтобы мой метод requestSucceeded () установил текст в моем заголовке LabelField. Когда основной текст переведен, я хочу, чтобы мой метод requestSucceeded () установил текст в моем теле LabelField.

Каков наилучший способ сделать так, чтобы мой метод requestSucceeded () различал разные поля для обновления? В настоящее время я передаю переводчику две вещи (через массив String []): текст для перевода и «cookie», описывающий переводимый элемент. Затем я использую операторы if в моем методе обратного вызова requestSucceeded (), чтобы обновить соответствующее поле на основе «cookie» (которое переводчик отправит обратно вместе с переведенным текстом).

Я чувствую, что должен быть лучший способ сделать все это. У кого-нибудь есть предложения?

Спасибо!

1 Ответ

0 голосов
/ 11 октября 2010

Во-первых, я предлагаю вам прочитать шаблон команд . Это в основном проектный подход, который можно использовать для инкапсуляции каждого из ваших запросов на перевод в объект, который знает, как обрабатывать результаты. Затем я предлагаю создать коллекцию, в которую эти команды могут быть вставлены, и поток вашей трансляции может получить свой вклад. Таким образом, вы можете (в зависимости от того, как работает API) обрабатывать пакет запросов на перевод по тому же HTTP-соединению.

...