Cómo pasar el resultado del método onpostexecute asynctask en la actividad principal android
Estoy desarrollando una aplicación en la que necesito enviar el valor del resultado del método onPostExecute del asynctask a la actividad anterior, es decir, la actividad en la que se está llamando la tarea aync.pls poner algunos códigos. Cualquier ayuda es apreciada
- Mostrar ProgressDialog en una clase de servicio
- onPostExecute () no funciona en volver a ejecutar de asyncTask llamado de una actividad
- Java Android AsyncTask - ¿Cuándo AsyncTask deja de funcionar?
- ¿Cuáles son las ventajas / desventajas de pasar argumentos al constructor AsyncTask?
- ¿Es posible determinar el tamaño del archivo que se va a descargar?
- Qué concepto de diseño utilizar para actualizar la interfaz de usuario async
- Cómo devolver anonymous Lista o ArrayList en AsyncTask en Android
- ¿Cómo devuelvo un booleano de AsyncTask?
- ¿Debo usar AsyncTask o IntentService para mi aplicación?
- ¿Es seguro hacer toda la limpieza en onDestroy?
- Async Task OnProgressUpdate CalledFromWrongThreadException: Sólo el subproceso original que creó una jerarquía de vista puede tocar sus vistas
- ¿Puedo determinar si una referencia a una actividad es válida?
- Android dos AsyncTasks ejecución en serie o en paralelo? - El segundo es helada pero el resultado es bueno
Dos caminos:
- Declara la clase que extiende AsyncTask como clase privada en la actividad de los padres
- Pass Handler o Actividad como param de la clase extendiendo AsyncTask
Si yo fuera tú, seguiría la primera opción.
Mira 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(); } } }
Nota 1
El código colocado en el cuerpo de la función onPostExecute
ya se ejecuta en el hilo de actividad, solo debes mencionar que this
MyTask.this
clave lleva a MyTask.this
y no MyActivitySubclass.this
Bueno, si tu AsyncTask es una clase interna, podrías simplemente llamar a un método en tu actividad desde 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); } } }
El método onPostExecute se dispara en el subproceso principal de la interfaz de usuario, por lo que ya se ha realizado algo en el llamante AsyncTasks.
http://developer.android.com/reference/android/os/AsyncTask.html
Dispara un evento en OnPostExecute.
Es un complemento a la respuesta de Marek Sebera, señaló a utilizar un controlador. Para mantener el código simple e intuitivo utilizar una interfaz. Esto no es un concepto alienígena, lo usamos todo el tiempo para funciones de devolución de llamada (por ejemplo: OnClickListner etc.). El código se vería algo así.
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 } }
Si queremos usar la misma clase AsynTask en varios sitios, podemos usar este tipo de implementación en lugar de usar implementación de clases anidadas.