@Override protectedvoidonPostExecute(Void result) { //do stuff //how to return a value to the calling method? } }
А затем в моем Activity/Fragment:
// The task is started from activity myTask.execute() // something like this? myvalue = myTask.getvalue()
Редактировать: Об этом спрашивали давным-давно, когда я не был знаком с Java, теперь, когда я лучше с этим разбираюсь, я сделаю краткое резюме:
Смысл асинхронной задачи в том, что задача является asynchronous, что означает, что после вызова execute() задачи задача начинает выполняться в собственном потоке. возвращать значение из asynctask было бы бессмысленно, потому что исходный вызывающий поток уже продолжил выполнять другие действия (таким образом, задача асинхронна).
Подумайте о времени: в какой-то момент времени вы запустили задачу, которая будет выполняться параллельно с основным потоком. Когда параллельно выполняемая задача завершена, время также истекло в основном потоке. Параллельная задача не может вернуться назад во времени, чтобы вернуть значение в основной поток.
Я работал на C, поэтому мало что знал об этом. Но, похоже, у многих людей возникает один и тот же вопрос, поэтому я решил немного прояснить его.
Переведено автоматически
Ответ 1
Для этого и существует onPostExecute(). Он выполняется в потоке пользовательского интерфейса, и вы можете вывести свой результат оттуда на экран (или куда угодно еще, что вам нужно). Он не будет вызван, пока не будет доступен конечный результат. Если вы хотите получить промежуточные результаты, взгляните на onProgressUpdate()
Ответ 2
Почему бы не вызвать метод, который обрабатывает значение?
Пример кода: Activity использует AsyncTask для получения значения в фоновом потоке, затем AsyncTask возвращает результат обратно в Activity, вызывая processValue:
voidprocessValue(Value myValue) { //handle value //Update GUI, show toast, etc.. }
privateclassMyTaskextendsAsyncTask<Void, Void, Value> { @Override protected Value doInBackground(Void... params) { //do stuff and return the value you want return Value; }