Шаблон для повторного использования Android AsnycTask в нескольких действиях?

В моем проекте есть несколько подклассов Activity, каждый из которых вызывает веб-службу на основе SOAP, обрабатывает и отображает результаты. Сериализация SOAP, обработка вызовов и преобразование результатов в различные объекты POJO инкапсулированы в класс MyWebService. Этот класс выполняет фактические вызовы веб-служб через AsyncTask.

Чтобы иметь возможность возвращать результаты вызывающему подклассу Activity, я решил, что должен обеспечить, чтобы все эти действия реализовывали интерфейс WebServiceResultProcessor, определяя единственную функцию (processWebServiceResults), действующую как обратный вызов для AsyncTask, вызываемой из onPostExecute.

Я также хочу отображать ProgressDialog во время вызова веб-службы. И вот мой вопрос. Чтобы иметь возможность отображать ProgressDialog (либо из MyWebService, либо из AsyncTask), мне нужно передать ссылку на контекст действия вызывающей стороны. А чтобы иметь возможность выполнять функцию обратного вызова из AsyncTask, мне такженужно передать ту же ссылку на объект, но на этот раз как WebServiceResultProcessor. Мне кажется, что это запах кода, дважды передавая один и тот же объект, но я не вижу никакого способа обойти это.Вместо взаимодействия я мог бы создать новый базовый класс, расширив класс Activity и обеспечив наследование от класса расширения, но это означало бы, что я бы исключил ListActivity и тому подобное из использования этого класса MyWebService.

Есть ли лучший способ сделать это?

5
задан András Szepesházi 20 June 2012 в 07:04
поделиться