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


AsyncTask: ¿dónde va el valor de retorno de doInBackground ()?

Al llamar a AsyncTask<Integer,Integer,Boolean> , donde es el valor devuelto de:

protected Boolean doInBackground(Integer... params) ?

Usualmente iniciamos AsyncTask con new AsyncTaskClassName().execute(param1,param2......); Pero no parece devolver un valor.

¿Dónde se puede encontrar el valor de retorno de doInBackground() ?

  • La actividad que utiliza ViewPager, PagerAdapter y AsyncTask provoca una vista en blanco
  • Actualización del diálogo de progreso en Activity from AsyncTask
  • ¿Cuál es la ventaja de los cargadores sobre Asynctask en Android?
  • Cómo manejar el valor de retorno de AsyncTask
  • Android Múltiples pausas de descarga reanudar en listview con actualización de progreso
  • Por qué onPostExecute ejecutar antes de doInBackground terminar en AsyncTask
  • Asynctask vs. Thread vs Services vs Loader
  • No se puede llamar a runOnUiThread en un subproceso desde dentro de un servicio
  • 2 Solutions collect form web for “AsyncTask: ¿dónde va el valor de retorno de doInBackground ()?”

    El valor está entonces disponible en onPostExecute, que es posible que desee anular para trabajar con el resultado.

    Aquí hay un fragmento de código de ejemplo de los documentos de Google:

      private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { protected Long doInBackground(URL... urls) { int count = urls.length; long totalSize = 0; for (int i = 0; i < count; i++) { totalSize += Downloader.downloadFile(urls[i]); publishProgress((int) ((i / (float) count) * 100)); } return totalSize; } protected void onProgressUpdate(Integer... progress) { setProgressPercent(progress[0]); } protected void onPostExecute(Long result) { showDialog("Downloaded " + result + " bytes"); } } 

    Puede recuperar el valor devuelto de Boolean doInBackground() al llamar al método get () de la clase AsyncTask :

     AsyncTaskClassName task = new AsyncTaskClassName(); bool result = task.execute(param1,param2......).get(); 

    Pero tenga cuidado con la capacidad de respuesta de la interfaz de usuario, porque get() espera que el cálculo se complete y bloqueará el subproceso de la interfaz de usuario .
    Si está utilizando una clase interna, es mejor hacer el trabajo en el método onPostExecute (Boolean result).

    Si solo desea actualizar la interfaz de usuario, AsyncTask ofrece dos posibilidades:

  • Para actualizar la interfaz de usuario en paralelo con la tarea ejecutada en doInBackground() (por ejemplo, para actualizar un ProgressBar ), tendrá que llamar a publishProgress() dentro del método doInBackground() . A continuación, debe actualizar la interfaz de usuario en el método onProgressUpdate() .
  • Para actualizar la interfaz de usuario cuando se realiza la tarea, debe hacerlo en el método onPostExecute() .
  •  /** This method runs on a background thread (not on the UI thread) */ @Override protected String doInBackground(String... params) { for (int progressValue = 0; progressValue < 100; progressValue++) { publishProgress(progressValue); } } /** This method runs on the UI thread */ @Override protected void onProgressUpdate(Integer... progressValue) { // TODO Update your ProgressBar here } /** * Called after doInBackground() method * This method runs on the UI thread */ @Override protected void onPostExecute(Boolean result) { // TODO Update the UI thread with the final result } 

    De esta manera usted no tiene que preocuparse por problemas de respuesta.

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