sábado, 14 de junio de 2014

Android - cannot execute task the task has already been executed (a task can be executed only once)

Al usar las AsyncTask en android puede aparecer el siguiente error:
cannot execute task the task has already been executed (a task can be executed only once)
Esto es debido a que estamos intentando ejecutar 2 veces un mismo hilo, y eso no es posible, lo que si podemos hacer es lanzar un nuevo hilo que ejecute la misma tarea.

Seguramente tengamos algo similar a lo siguiente

public void lanzaAsincrona(View view) {
downloadTask.execute(uri);
}

En donde downloadTask esta igualado posiblemente en el onCreate de la siguiente manera
downloadTask = new myDownloadTask();
de esta forma creamos una nueva instancia de nuestra clase en la variable downloadTask, si borramos esa linea en el onCreate, y la copiamos dentro del método lanzaAsincrona, lo arreglaremos, ya que cada vez que llamemos a ese método crearemos una nueva instancia, por lo que se ejecutara en un nuevo hilo; debería quedar algo así

public void lanzaAsincrona(View view) {
downloadTask = new myDownloadTask();
downloadTask.execute(uri);
}

o en su versión resumida
public void lanzaAsincrona(View view) {
new myDownloadTask().execute(uri);
}

Espero os sirva de ayuda