Pasar parámetros a Asynctask

Estoy utilizando las tareas de Async para obtener la cadena de la actividad del menú y la carga de algunas cosas .. pero no soy capaz de hacerlo .. ¿Me estoy utilizando de la manera correcta y estoy pasando los parámetros correctamente? Consulte el fragmento de código. Gracias

private class Setup extends AsyncTask<Void, Integer, Void> { @Override protected Void doInBackground(Void... params) { try { if (!(getIntent().getExtras().isEmpty())) { Bundle gotid = getIntent().getExtras(); identifier = gotid.getString("key"); } } catch (Exception e) { e.getStackTrace(); } finally { if (identifier.matches("abc")) { publishProgress(0); db.insert_fri(); } else if ((identifier.matches("xyz"))) { publishProgress(1); db.insert_met(); } } return null; } @Override protected void onProgressUpdate(Integer... i) { // start the song here if (i[0] == 0) { song.setLooping(true); song.start(); } } @Override protected void onPostExecute(Void res) { } @Override protected void onPreExecute() { // do something before execution } } 

En lugar de esto haría

  private class Setup extends AsyncTask<String, Integer, Void> { @Override protected Void doInBackground(String... params) { String identifier = params[0]; if (identifier.matches("abc")) { publishProgress(0); db.insert_fri(); } else if ((identifier.matches("xyz"))) { publishProgress(1); db.insert_met(); } } return null; } @Override protected void onProgressUpdate(Integer... i) { // start the song here if (i[0] == 0) { song.setLooping(true); song.start(); } } @Override protected void onPostExecute(Void res) { } @Override protected void onPreExecute() { // do something before execution } } 

Y compruebe "identificador" antes de invocar el asynctask para evitar la sobrecarga de crear un AsyncTask

Me gusta esto

 if (!(getIntent().getExtras().isEmpty())) { Bundle gotid = getIntent().getExtras(); identifier = gotid.getString("key"); new Setup().execute(identifier); } 

Evite agregar un constructor.

Simplemente pase sus parámetros en el método de ejecución de tareas

 new BackgroundTask().execute(a, b, c); // can have any number of params 

Ahora su clase de fondo debería ser así

 public class BackgroundTask extends AsyncTask<String, Integer, Long> { @Override protected Long doInBackground(String... arg0) { // TODO Auto-generated method stub String a = arg0[0]; String b = arg0[1]; String c = arg0[2]; //Do the heavy task with a,b,c return null; } //you can keep other methods as well postExecute , preExecute, etc } 

Una manera simple es agregar un constructor:

 public Setup(String a, Int b) { this.a = a; this.b = b; } 

AsyncTask significa doInBackground () devuelve Void, onProgressUpdate () toma parámetros de entero y doInbackground toma … Params de cadena!

Así que no necesitas (y REALMENTE no deberías) usar Intent, ya que está destinado a ser utilizado para pasar argumentos a través de Actividades, no de Hilos.

Y como se dijo antes, puede hacer un constructor y un parámetro global a su clase llamada "identificador"

 public class Setup... { private String identifier; public Setup(String a) { identifier = a; } } 

Esperaba que pudiera ayudar. Saludos

  • Android: ¿Cómo ejecutar asynctask de diferentes archivos de clase?
  • Uso de espera en AsyncTask
  • ¿Cuál es el propósito de la declaración de devolución en doInBackground () de ASynctask?
  • Problema de corrupción de bases de datos precargado en la aplicación de Android
  • Cómo dejar que Async Task termine en Android
  • La creación de AsyncTask causa bloqueo
  • Inicie AsyncTask desde otro AsyncTask doInBackground ()
  • ¿Cuál es el meanining de 3 puntos en parámetros de función?
  • Actualización de una actividad desde un AsyncTask
  • Cómo utilizar notifydatasetchanged in recyclerview gridlayout
  • Actualizar la interfaz de usuario desde un AsyncTaskLoader
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.