Android cómo trabajar con asynctasks progressdialog

Asynctask tiene 4 métodos override onPreExecute() , doInBackground() , onProgressUpdate() , onPostExecute() excepto onProgressUpdate todos están funcionando. ¿Qué debo hacer para que onProgressUpdate () funcione. ¿Puede alguien por favor explicar brevemente cuál es el uso de onProgressUpdate() , lo que debe escribir dentro de este?

onProgressUpdate() se utiliza para operar el progreso de las operaciones asíncronas a través de este método. Observe el parámetro con el tipo de datos Integer . Esto corresponde al segundo parámetro en la definición de clase. Esta devolución de llamada se puede activar desde dentro del 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<Context, Integer, String> { // -- 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 asincrónica, la tarea pasa por 4 pasos:

OnPreExecute (), invocado en el subproceso de la interfaz de usuario antes de ejecutar la tarea. Este paso se utiliza normalmente para configurar la tarea, por ejemplo mostrando una barra de progreso en la interfaz de usuario.

DoInBackground (Params …), invocado en el subproceso de fondo inmediatamente después de que onPreExecute () termine de ejecutarse. Este paso se utiliza para realizar cálculos de fondo que pueden tardar mucho tiempo. Los parámetros de la tarea asincrónica se pasan a este paso. El resultado del cálculo debe ser devuelto por este paso y se pasará de nuevo 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 de UI, en el paso onProgressUpdate (Progreso …).

OnProgressUpdate (Progreso …), invocado en el subproceso de la interfaz de usuario después de una llamada a publishProgress (Progreso …). La temporización de la ejecución no está definida. Este método se utiliza para mostrar cualquier forma de progreso en la interfaz de usuario mientras el cálculo de fondo sigue ejecutándose. Por ejemplo, se puede utilizar para animar una barra de progreso o mostrar registros en un campo de texto.

OnPostExecute (Resultado), invocado en el subproceso de interfaz de usuario después de 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<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)); // 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 genéricos de AsyncTask Los tres tipos utilizados por una tarea asíncrona son los siguientes:

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

Progreso, el tipo de unidades de progreso publicadas durante la computación de fondo.

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

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

Cuando se ejecuta una tarea asincrónica, la tarea pasa por 4 pasos:

 onPreExecute() 

Se invoca en el subproceso de interfaz de usuario inmediatamente después de ejecutarse la tarea. Este paso se utiliza normalmente para configurar la tarea, por ejemplo mostrando una barra de progreso en la interfaz de usuario.

 doInBackground(Params...) 

Se invoca en el subproceso de fondo inmediatamente después de que onPreExecute() finaliza la ejecución. Este paso se utiliza para realizar cálculos de fondo que pueden tardar mucho tiempo. Los parámetros de la tarea asincrónica se pasan a este paso. El resultado del cálculo debe ser devuelto por este paso y se pasará de nuevo 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 de UI, en el paso onProgressUpdate(Progress...) .

 onProgressUpdate(Progress...) 

Se invoca en el subproceso de interfaz de usuario después de una llamada a publishProgress(Progress...) . La temporización de la ejecución no está definida. Este método se utiliza para mostrar cualquier forma de progreso en la interfaz de usuario mientras el cálculo de fondo sigue ejecutándose. Por ejemplo, se puede utilizar para animar una barra de progreso o mostrar registros en un campo de texto.

 onPostExecute(Result) 

Se invoca en el subproceso de interfaz de usuario después de 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 la interfaz de usuario después de invocar a publishProgress . De AsyncTask documentación – su código debe verse algo así

 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"); } } 
 hey this might help you?? 

La barra de progreso desaparecerá automáticamente cuando obtenga la respuesta

 User_AsyncTaskk extends AsyncTask public class User_AsyncTask extends AsyncTask<String, String, String> { 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) { } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.