Может ли метод 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 как внутренний класс для своей активности, а затем объявите любое значение, которое вы хотите вернуть как глобальное. Было ли это полезным для вас?