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) ?

  • Cómo colocar textview con x, y posición
  • Custom EditText no muestra el teclado en el enfoque
  • Iniciar una nueva actividad en onCreate sólo funciona con demora
  • Cuán exacta es la medida de altitud en los teléfonos móviles
  • Android - cómo mantener el enum de proguard
  • Samsung Galaxy Devices no puede usar geolocation.getCurrentPosition
  • 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() ?

  • Cómo implementar mi propio esquema URI en Android
  • ShareActionProvider no se puede hacer clic y no se procesa correctamente en el primer procesamiento
  • Detección de navegador de emulador de Android
  • Android Studio 1.0 falla en la compilación dexDebug o dexRelease
  • No se puede resolver host: URL Ninguna dirección asociada con hostname
  • LayoutTransition: Animar la vista junto a una vista en expansión
  • 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.