Android cómo trabajar con asynctasks progressdialog

Asynctask tiene 4 métodos de anulación onPreExecute() , doInBackground() , onProgressUpdate() , onPostExecute() excepto onProgressUpdate todos están funcionando. ¿Qué debo hacer para que onProgressUpdate () funcione? ¿Alguien puede explicarme brevemente de qué sirve onProgressUpdate() , qué debería escribir dentro de esto?

onProgressUpdate() se usa para operar el progreso de las operaciones asincrónicas a través de este método. Tenga en cuenta el parámetro con tipo de datos Integer . Esto corresponde al segundo parámetro en la definición de la clase. Esta callback se puede desencadenar desde el cuerpo del método publishProgress() llamando a publishProgress() .

Ejemplo

 import android.app.Activity; import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; public class AsyncTaskExample extends Activity { protected TextView _percentField; protected Button _cancelButton; protected InitTask _initTask; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); _percentField = (TextView) findViewById(R.id.percent_field); _cancelButton = (Button) findViewById(R.id.cancel_button); _cancelButton.setOnClickListener(new CancelButtonListener()); _initTask = new InitTask(); _initTask.execute(this); } protected class CancelButtonListener implements View.OnClickListener { public void onClick(View v) { _initTask.cancel(true); } } /** * sub-class of AsyncTask */ protected class InitTask extends AsyncTask { // -- run intensive processes here // -- notice that the datatype of the first param in the class definition matches the param passed to this // method // -- and that the datatype of the last param in the class definition matches the return type of this method @Override protected String doInBackground(Context... params) { // -- on every iteration // -- runs a while loop that causes the thread to sleep for 50 milliseconds // -- publishes the progress - calls the onProgressUpdate handler defined below // -- and increments the counter variable i by one int i = 0; while (i < = 50) { try { Thread.sleep(50); publishProgress(i); i++; } catch (Exception e) { Log.i("makemachine", e.getMessage()); } } return "COMPLETE!"; } // -- gets called just before thread begins @Override protected void onPreExecute() { Log.i("makemachine", "onPreExecute()"); super.onPreExecute(); } // -- called from the publish progress // -- notice that the datatype of the second param gets passed to this method @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); Log.i("makemachine", "onProgressUpdate(): " + String.valueOf(values[0])); _percentField.setText((values[0] * 2) + "%"); _percentField.setTextSize(values[0]); } // -- called if the cancel button is pressed @Override protected void onCancelled() { super.onCancelled(); Log.i("makemachine", "onCancelled()"); _percentField.setText("Cancelled!"); _percentField.setTextColor(0xFFFF0000); } // -- called as soon as doInBackground method completes // -- notice that the third param gets passed to this method @Override protected void onPostExecute(String result) { super.onPostExecute(result); Log.i("makemachine", "onPostExecute(): " + result); _percentField.setText(result); _percentField.setTextColor(0xFF69adea); _cancelButton.setVisibility(View.INVISIBLE); } } } 

Los 4 pasos

Cuando se ejecuta una tarea asíncrona, la tarea pasa por 4 pasos:

onPreExecute (), invocado en el subproceso de la interfaz de usuario antes de que se ejecute la tarea. Este paso se usa normalmente para configurar la tarea, por ejemplo, al mostrar una barra de progreso en la interfaz de usuario.

doInBackground (Params …), invocado en el hilo de fondo inmediatamente después de onPreExecute () termina de ejecutarse. Este paso se usa para realizar un cálculo de fondo que puede llevar mucho tiempo. Los parámetros de la tarea asíncrona se pasan a este paso. El resultado del cálculo debe ser devuelto por este paso y será devuelto al último paso. Este paso también puede usar publishProgress (Progress …) para publicar una o más unidades de progreso. Estos valores se publican en el subproceso UI, en el paso onProgressUpdate (Progreso …).

onProgressUpdate (Progress …), invocado en el hilo de UI después de una llamada a publishProgress (Progress …). El momento de la ejecución no está definido. Este método se usa para mostrar cualquier forma de progreso en la interfaz de usuario mientras el cálculo de fondo aún se está ejecutando. Por ejemplo, se puede usar para animar una barra de progreso o mostrar registros en un campo de texto.

onPostExecute (Resultado), invocado en el hilo de la interfaz de usuario una vez que finaliza el cálculo de fondo. El resultado del cálculo de fondo se pasa a este paso como un parámetro.

ejemplo

 private class DownloadFilesTask extends AsyncTask { 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)); // Escape early if cancel() is called if (isCancelled()) break; } return totalSize; } protected void onProgressUpdate(Integer... progress) { setProgressPercent(progress[0]); } protected void onPostExecute(Long result) { showDialog("Downloaded " + result + " bytes"); } } 

Tipos generics de AsyncTask Los tres tipos utilizados por una tarea asincrónica son los siguientes:

Params, el tipo de parámetros enviados a la tarea en la ejecución.

Progreso, el tipo de unidades de progreso publicadas durante el cálculo de fondo.

Resultado, el tipo del resultado del cálculo de fondo.

Sí, tienes razón, hay cuatro métodos en AsyncTask

Cuando se ejecuta una tarea asíncrona, la tarea pasa por 4 pasos:

 onPreExecute() 

Invocado en el subproceso de interfaz de usuario inmediatamente después de que se ejecuta la tarea. Este paso se usa normalmente para configurar la tarea, por ejemplo, al mostrar una barra de progreso en la interfaz de usuario.

 doInBackground(Params...) 

Invocado en el hilo de fondo inmediatamente después de onPreExecute() termina de ejecutarse. Este paso se usa para realizar un cálculo de fondo que puede llevar mucho tiempo. Los parámetros de la tarea asíncrona se pasan a este paso. El resultado del cálculo debe ser devuelto por este paso y será devuelto al último paso. Este paso también puede usar publishProgress(Progress...) para publicar una o más unidades de progreso. Estos valores se publican en el subproceso UI, en el paso onProgressUpdate(Progress...) .

 onProgressUpdate(Progress...) 

Invocado en el hilo de UI después de una llamada a publishProgress(Progress...) . El momento de la ejecución no está definido. Este método se usa para mostrar cualquier forma de progreso en la interfaz de usuario mientras el cálculo de fondo aún se está ejecutando. Por ejemplo, se puede usar para animar una barra de progreso o mostrar registros en un campo de texto.

 onPostExecute(Result) 

Invocado en el hilo de la interfaz de usuario una vez que finaliza el cálculo de fondo. El resultado del cálculo de fondo se pasa a este paso como un parámetro.

Para más información, haga clic aquí

onProgressUpdate se ejecuta en el subproceso de UI después de invocar publishProgress . De la documentación de AsyncTask: su código debería verse algo como esto

 private class DownloadFilesTask extends AsyncTask { 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"); } } 
 hey this might help you?? 

la barra de progreso desaparecerá automáticamente cuando obtendrás la respuesta

 User_AsyncTaskk extends AsyncTask public class User_AsyncTask extends AsyncTask { String response = ""; @Override protected void onPreExecute() { try { if (progressDialog != null) progressDialog.cancel(); } catch (Exception e) { } progressDialog = ProgressDialog.show(DisplayDetails.this, "", "Please wait...", true, true); progressDialog.setCancelable(false); progressDialog.show(); } protected String doInBackground(String... params) { try { //Complete ur Code Log.i("AUTO ", "response is : " + response); return response; } catch (Exception e) { } } @Override protected void onPostExecute(String s) { if (progressDialog != null) { progressDialog.dismiss(); progressDialog = null; } try { } catch (Exception e) { } }