Может ли метод OnPostExcecute в значениях RETURN в AsyncTask?

Я разрабатываю приложение для Android, которое требует использования AsyncTask для сетевого подключения. Я назвал это из основного потока. Таким образом, метод doInBackground запускается, а затем возвращается к методу onPostExecute . После того, как выполняется метод onPostExecute, я хочу вернуть значение обратно в действие, из которого он был вызван, поскольку мне нужно выполнить некоторую операцию в этом конкретном действии, для которого требуется значение, возвращаемое методом onPostExecute. Как я могу это решить? Как вернуть значение из onPostExecute?

Заранее спасибо

AsyncTask, как указано в названии, работает асинхронно с потоком пользовательского интерфейса, метод onPostExecute будет вызываться в какой-то момент в будущем, когда doInBackground будет завершен. Нам все равно, когда будет вызван метод onPostExecute (на самом деле нет способа рассказать время сборки проекта), единственное, что нам нужно, – это метод onPostExecute, который в какой-то момент в будущем будет корректно называться базовой структурой. Поэтому целью метода onPostExecute является обработка результата, возвращаемого из рабочего потока, поэтому также единственным аргументом метода onPostExecute является результат, возвращаемый методом doInBackground.

Я должен выполнить некоторую операцию в этом конкретном действии, которое требует значения, возвращаемого методом onPostExecute. Как я могу это решить?

Например, вы можете создать некоторые переменные экземпляра (или использовать шаблон listerner) в классе Activity, чтобы получить результат при возврате и готовности в методе onPostExecute. Проблема в том, что вы никогда не знаете, когда этот результат будет готов за пределами метода onPostExecute во время сборки проекта, поскольку он фактически определяется во время выполнения приложения. Если вы не запишете какой-либо механизм ожидания, который непрерывно обрабатывает результат, что приводит к жертве преимущества AsyncTask, например, встроенного API AsyncTask.get (), который заставляет AsyncTask работать синхронно с потоком пользовательского интерфейса и возвращать результат в Activity.

Лучшей практикой является изменение вашего дизайна и перемещение кода операции, который требует результата, возвращаемого из AsyncTask, в метод onPostExecute. надеюсь это поможет.

Вы можете использовать getter и setter для получения значения обратно из AsyncTask

 public class MainActivity extends Activity { public String retunnumfromAsyncTask; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layouttest); new Asyntask(this).execute(); } public class Asyntask extends AsyncTask<Void, Void, String> { private final Context Asyntaskcontext; public Asyntask(Context context){ Asyntaskcontext = context; } @Override protected void onPostExecute(String result) { MainActivity mainactivity = (MainActivity) Asyntaskcontext; mainactivity.retunnumfromAsyncTask = result; super.onPostExecute(result); } } } 

Просто напишите класс AsyncTask как внутренний класс для своей активности, а затем объявите любое значение, которое вы хотите вернуть как глобальное. Было ли это полезным для вас?

Intereting Posts
Разработка Android NFC с использованием фрагмента Android: изменение элементов меню ActionBar из фрагмента Как изменить цвет перетаскивания списка «конец прокрутки»? Выбранный элемент в пользовательском listview с контекстной панелью действий Как перевести / повторить текущую мелодию звонка в Android из приложения? Android maps exception java.lang.NoClassDefFoundError: android.security.MessageDigest Использование UnboundID SDK с файлом сертификата SSL для подключения к LDAP-серверу в приложении Android Запретить «Enter key» для запуска TextWatcher Android: выполнять код через регулярные промежутки времени Как использовать colorstatelist в android Как удалить задержку при повторении анимации на Android? Как отформатировать длинный <pre> блок HTML, подходящий для устройств с ограниченным ограничением, таких как iPhone Android default launchMode активности LAUNCHER? Компонент Dagger2 с несколькими зависимостями Android Tesseract OCR 7 сегментных цифр