Cómo utilizar AsyncTask correctamente en Android

No quiero pasar ningún argumento al método doInBackground de AsyncTask.

Entonces, ¿cómo debería ser el código?

 import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle; public class AsyncExample extends Activity{ private String url="http://www.google.co.in"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); new AsyncCaller().execute(); } private class AsyncCaller extends AsyncTask<Void, Void, Void> { ProgressDialog pdLoading = new ProgressDialog(AsyncExample.this); @Override protected void onPreExecute() { super.onPreExecute(); //this method will be running on UI thread pdLoading.setMessage("\tLoading..."); pdLoading.show(); } @Override protected Void doInBackground(Void... params) { //this method will be running on background thread so don't update UI frome here //do your long running http tasks here,you dont want to pass argument and u can access the parent class' variable url over here return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); //this method will be running on UI thread pdLoading.dismiss(); } } } 

Según AsyncTask , su

  AsyncTask<Params, Progress, Result> 
  • 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.

Así que si quieres pasar void en doInBackground simplemente pasa vacío en lugar de Params.

Ejemplo de código:

 class DownloadLink extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... params) { // TODO Auto-generated method stub //Do Your stuff here.. return null; } } 

Y lo llaman como:

  new DownloadLink().execute(); 

Cree su clase AsyncTask como si no desea pasar ningún parámetro a doInBackground :

  public class LongOperation extends AsyncTask<Void, Void, String> { public LongOperation(Context context) { } @Override protected void onPreExecute() { } @Override protected String doInBackground(Void... params) { return null; } @Override protected void onPostExecute(String result) { } } 

E iniciar AsyncTask como sin pasar ningún parámetro para ejecutar:

  LongOperation longOperation = new LongOperation(this); longOperation.execute(); 

¿Por qué no quieres pasarle argumentos? Usted debe explicar …

Así es como funciona normalmente (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"); } } 

Y para ejecutarlo llamas:

 new DownloadFilesTask().execute(url1, url2, url3); 

Fuente: Android docs

  • Cómo llamar a notifyDataSetChanged () de AsyncTask onPostExecute () en otra clase
  • Manejo de errores Asynctask
  • Async tarea .. no puede llamar a executeOnExecutor ()
  • Java: tipo ilegal 'void' en ASyncTask
  • Conceptos básicos de Android: ejecutar código en el subproceso de la interfaz de usuario
  • Debe crear nuevas tareas asíncronas para cada llamada diferente o utilizar la misma
  • ProgressDialog o ProgressBar ralentiza la aplicación que ejecuta Android 4.1
  • Evento de incendio en AsyncTask finalizado
  • Android: ¿Cómo puedo pasar parámetros a OnPreExecute () de AsyncTask?
  • AsyncTask con rotación de pantalla - onRetainNonConfigurationInstance obsoleta
  • Errores al grabar sonido en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.