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)
?
- Respuesta de retorno de loopj asynchttpclient de Android
- AsyncTask "Sólo el subproceso original que creó una jerarquía de vista puede tocar sus vistas."
- Diálogo de progreso con asynctask
- Android Descargar File by AsyncTask no funciona con 3G solo con Wi-Fi
- actualizar el widget android (utilizando tareas asíncronas) con una imagen de Internet
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 instancia de audiorecord de Android falla
- Java.lang.NullPointerException en doInBackground poner HashMap en ArrayList
- Mostrar una barra de progreso cuando se está cargando una actividad
- Java / Android cómo iniciar un AsyncTask después de 3 segundos de retraso?
- Android Múltiples pausas de descarga reanudar en listview con actualización de progreso
- ¿Necesita ayuda para descargar imágenes de fondo en Android?
- Android Phonegap: Notificar a javascript cuando se termina un AsyncTask
- Ejemplo: socket de red bidireccional de Android utilizando AsyncTask
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:
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()
. 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.
- No puede hacer clic en la fila listview con imagebutton
- GetLocationOnScreen () vs getLocationInWindow ()