Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Puede OnPostExcecute método en AsyncTask RETURN valores?

Estoy desarrollando una aplicación de Android que requiere el uso de AsyncTask para la conexión de red. Lo llamé desde el hilo principal. Así que el método doInBackground se ejecuta y luego vuelve al método onPostExecute . Después de ejecutar el método onPostExecute, quiero devolver un valor a la actividad desde donde fue llamado, ya que tengo que realizar alguna operación en esa actividad particular que requiere el valor devuelto por el método onPostExecute. ¿Cómo puedo solucionar esto? ¿Cómo devuelvo un valor de onPostExecute?

Gracias por adelantado

3 Solutions collect form web for “¿Puede OnPostExcecute método en AsyncTask RETURN valores?”

AsyncTask, como su nombre indica, se ejecuta de forma asincrónica con el subproceso de UI, el método onPostExecute se llamará en algún momento en el futuro, cuando doInBackground finalizado. No nos importa cuando onPostExecute método será llamado (en realidad no hay manera de decir en el tiempo de construcción del proyecto), lo único que importa es onPostExecute método está garantizado para ser llamado correctamente por el marco subyacente en algún momento en el futuro. Así que el propósito del método onPostExecute es procesar el resultado devuelto desde el subproceso de trabajo, esto es también por qué el único argumento del método onPostExecute es el resultado devuelto por el método doInBackground.

Tengo que realizar alguna operación en esa actividad particular que requiere el valor devuelto por el método onPostExecute. ¿Cómo puedo solucionar esto?

De causa, puede crear algunas variables de instancia (o utilizar el patrón listerner) en la clase de actividad almacenar el resultado cuando se devuelve y listo en el método onPostExecute. El problema es que nunca se sabe cuándo este resultado está listo fuera del método onPostExecute en el tiempo de construcción del proyecto, ya que se determina realmente en el tiempo de ejecución de la aplicación. A menos que escriba algún mecanismo de espera que escuche continuamente el resultado, lo que resulta en sacrificar el beneficio de AsyncTask, por ejemplo, la API incorporada AsyncTask.get () que hace que AsyncTask funcione de forma síncrona con el subproceso de la interfaz de usuario y devuelva el resultado a la actividad.

La mejor práctica es cambiar su diseño y mover el código de operación que requiere el resultado devuelto de AsyncTask en onPostExecute método. espero que esto ayude.

Puede utilizar getter y setter para recuperar el valor de 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); } } } 

Simplemente escriba la clase AsyncTask como clase interna en su actividad y, a continuación, declare el valor que desea devolver como global. ¿Fue de ayuda para ti?

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.