Как получить возвращаемое значение из AsyncTask в основное действие?

У меня есть класс (например, вспомогательный класс), а не активность, которая управляет запросами на мыло. Я использую этот класс для отправки мыльных запросов, поступающих от действий, с помощью метода doInBAckground и перехвата всех возвращаемых значений из веб-службы с помощью onpostexecute. Все в порядке, но моя проблема начинается с этого момента, потому что я не мог передать класс асинхронной задачи возвращаемого значения в основной класс.


person Mustafa Güven    schedule 07.10.2011    source источник
comment
Взгляните на этот ответ   -  person Adil Soomro    schedule 07.10.2011
comment
просто используйте контекст действия и, используя этот контекст, установите значение для члена данных действия.   -  person user370305    schedule 07.10.2011
comment
@AdilSoomro Спасибо. Вот последний и работающий код. aaarkonusurum.blogspot.com/2011/10/   -  person Mustafa Güven    schedule 07.10.2011


Ответы (2)


У вас может быть некоторый служебный класс, доступный как синглтон (хорошо, синглтон - опасный шаблон, но его использование оправдано в Android, пока мы не получим вменяемую и юзабельную инъекцию зависимостей) и передать туда результат.

Преимущества: - не нужно возиться с намерениями/сериализуемостью - передавать данные или вызывать какой-либо метод или делать все, что вам нравится - все ваши действия используют один и тот же экземпляр службы singleton.

Недостатки: - паттерн singleton считается опасным

Вы даже можете пойти дальше и сделать свой сервис одноэлементным — вы запустите его методы как асинхронные задачи, а затем ваша активность может запрашивать результаты по выделенным методам.

Или вы можете сделать еще один шаг — зарегистрировать свою активность в качестве слушателя в асинхронной службе и вызвать метод в этой активности, когда она будет готова (примечание: поскольку это будет не поток пользовательского интерфейса, вы не сможете что-то сделать с пользовательским интерфейсом, если не используете runOnUiThread ()

person Konstantin Pribluda    schedule 07.10.2011

Вы пытались реализовать AsyncTask как внутренний класс вашей деятельности?

person Thommy    schedule 07.10.2011