У меня есть класс (например, вспомогательный класс), а не активность, которая управляет запросами на мыло. Я использую этот класс для отправки мыльных запросов, поступающих от действий, с помощью метода doInBAckground и перехвата всех возвращаемых значений из веб-службы с помощью onpostexecute. Все в порядке, но моя проблема начинается с этого момента, потому что я не мог передать класс асинхронной задачи возвращаемого значения в основной класс.
Как получить возвращаемое значение из AsyncTask в основное действие?
Ответы (2)
У вас может быть некоторый служебный класс, доступный как синглтон (хорошо, синглтон - опасный шаблон, но его использование оправдано в Android, пока мы не получим вменяемую и юзабельную инъекцию зависимостей) и передать туда результат.
Преимущества: - не нужно возиться с намерениями/сериализуемостью - передавать данные или вызывать какой-либо метод или делать все, что вам нравится - все ваши действия используют один и тот же экземпляр службы singleton.
Недостатки: - паттерн singleton считается опасным
Вы даже можете пойти дальше и сделать свой сервис одноэлементным — вы запустите его методы как асинхронные задачи, а затем ваша активность может запрашивать результаты по выделенным методам.
Или вы можете сделать еще один шаг — зарегистрировать свою активность в качестве слушателя в асинхронной службе и вызвать метод в этой активности, когда она будет готова (примечание: поскольку это будет не поток пользовательского интерфейса, вы не сможете что-то сделать с пользовательским интерфейсом, если не используете runOnUiThread ()
Вы пытались реализовать AsyncTask как внутренний класс вашей деятельности?