studio resueltos para intuitivas herramientas ejercicios desarrollo curso con avanzado aplicaciones android android-asynctask

resueltos - manual android studio avanzado



¿Cómo pasar diferentes objetos como parámetro a AsycTask? (3)

Si necesita pasarle dos objetos como parámetro, cree su propio titular y envíele los objetos del titular.

Crea un objeto que contiene su objeto personalizado junto con el objeto Archivo. Dependiendo de la situación, también puede hacer que su objeto personalizado solo mantenga presionado el objeto Archivo y pase la AsyncTask al objeto personalizado.

Dentro del método doInBackground , simplemente extraiga los objetos para que pueda procesarlos según sea necesario.

Estoy usando el siguiente código para crear una AsyncTask .

public class SaveFileToExternalStorage extends AsyncTask<File, Void, Boolean>{ protected Boolean doInBackground(File... file) { DalCategories c= new DalCategories(); boolean result = c.saveObject(customlistobject,file[0]); return result; } protected void onProgressUpdate() { //setProgressPercent(progress[0]); } protected void onPostExecute(boolean result) { //showDialog("Downloaded " + result + " bytes"); } }

Ahora quiero pasarle dos parámetros customlistobject y File objetos con progreso nulo y tipo de retorno boolean .

No sé cómo pasar ese customlistobject de customlistobject a mi AsyncTask junto con el objeto File .


Una opción es tener un constructor de su AsyncTask que tome esos parámetros

public class SaveFileToExternalStorage extends AsyncTask<File, Void, Boolean>{ List customlistobject; public SaveFileToExternalStorage(List aList) { customlistobject = aList; } protected Boolean doInBackground(File... file) { DalCategories c= new DalCategories(); boolean result = c.saveObject(customlistobject,file[0]);

La otra opción es pasar el objeto como primer parámetro de tipo de AsyncTask :

public class SaveFileToExternalStorage extends AsyncTask<Object, Void, Boolean>{ protected Boolean doInBackground(Object... objs) { File file = (File) ibjs[1]; List customlistobject = (List) objs[2]; DalCategories c= new DalCategories(); boolean result = c.saveObject(customlistobject,file[0]);

Esto funciona, ya que el parámetro real para doInBackground() es una lista de varargs y no un solo objeto.


Una solución no perfecta pero que funciona es usar Objeto como parámetro.

public class SaveFileToExternalStorage extends AsyncTask<Object, Void, Boolean>{ protected Boolean doInBackground(Object... param) { File file = (File) param[0]; List list = (CustomList) param[1]; return result; } protected void onProgressUpdate() { //setProgressPercent(progress[0]); } protected void onPostExecute(boolean result) { //showDialog("Downloaded " + result + " bytes"); } }

Este código es solo un ejemplo, debe asegurarse de que los objetos en el índice 0 y 1 sean realmente un archivo o su lista personalizada utilizando instanceof .

Octavian Damiean también ha escrito un buen método ...