Как передать результат asynctask onpostexecute метода в родительскую активность android

Я разрабатываю приложение, в котором мне нужно отправить значение результата метода onPostExecute asynctask в предыдущее действие, то есть активность, в которой задача aync вызывается. Pls помещают некоторые коды. Anyhelp оценили

Два пути:

  1. Объявить класс, расширяющий AsyncTask как закрытый класс в родительской активности
  2. Обработчик переноса или сама деятельность как параметр класса, расширяющий AsyncTask

Если бы я был вами, я бы выполнил первый вариант.
Посмотрите на DOCS :

class MyActivitySubclass extends Activity { function runOnPostExecute(){ // whatever } private class MyTask extends AsyncTask<Void, Void, Void> { void doInBackground(Void... params){ // do your background stuff } void onPostExecute(Void... result){ runOnPostExecute(); } } } 

Примечание 1

Код, помещенный в тело функции onPostExecute , уже запущен в потоке Activity, вы должны просто упомянуть, что this ключевые слова приводят к MyTask.this а не MyActivitySubclass.this

Хорошо, если ваш AsyncTask является внутренним классом, вы можете просто вызвать метод в своей деятельности из onPostExecute() :

 public class MyActivity extends Activity { public void someMethod(String someParam) { // do something with string here } public class InnerTask extends AsyncTask<...> { protected void onPostExecute(result) { someMethod(Send parameters); } } } 

Метод onPostExecute запускается в основном потоке пользовательского интерфейса, поэтому все, что делается там, уже есть в вызывающем агенте AsyncTasks.

http://developer.android.com/reference/android/os/AsyncTask.html

Пожар события в OnPostExecute.

Его добавление к ответу Марека Себеры, он указал на использование обработчика. Чтобы код был прост и интуитивно понятен, используйте интерфейс. Это не чужая концепция, мы все время используем ее для функций обратного вызова (например, OnClickListner и т. Д.). Код будет выглядеть примерно так.

  public class InnerTask extends AsyncTask<...> { interface ResultHandler { void gotResult(<> result); } private ResultHandler myResult; //constructor public InnerTask(....params...,ResultHandler callback) { ... this.myResult = callback; } protected void onPostExecute(<>result) { ... myResult.gotResult(result); } } public class MyActivity extends Activity implements InnerTask.ResultHandler { @Override protected void onCreate(Bundle savedInstanceState) { //do something //if you want the InnerTask to execute here InnerTask i = new InnerTask(....params...,this); //send 'this' as parameter i.execute(); } @Override public void gotResult(<> result) { //from onPostExecute } } 

Если мы хотим использовать один и тот же класс AsynTask на нескольких сайтах, мы можем использовать этот тип реализации вместо использования вложенных классов.

Intereting Posts
Когда нужно обнаружить завершение работы приложения? Применение ARGB-цвета к текстовому виду программно Уточнить соединения Firebase Почему я получаю сообщение об ошибке 500 при отправке данных POST на сайт ASP.NET MVC через Android? Можем ли мы удалить неиспользуемые приложения из Google Play? Ошибка Eclipse ADT: не удается запустить программу adb Как добавить банку в внешние библиотеки в студии android Ошибка кодирования видео с использованием данных OnAudioFilterRead Android – Как я могу просмотреть базу данных sql, созданную в моем приложении? Я запускаю его на эмуляторе Android в Eclipse Использовать layout_marginLeft в стиле кнопки, применяемом в качестве темы? Лучший способ справиться с повторяющейся ошибкой ввода Аварийные сигналы DialogFragment. При вызове функции startActivity () Отредактируйте AndroidManifest при компиляции для удаления API-ключа Элементы OnCreateContextMenu и ListView Phonegap 2.4.0 с Android 4.2 – странное поведение двойного клика