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 } }
- utilizar AsyncTask para mostrar datos en ListView
- ¿Cómo devuelvo un resultado de una tarea asíncrona
- Uso del "círculo animado" en un ImageView mientras se carga material
- ¿Cómo pasar el contexto de MenuItem onOptionsItemSelected a ASyncTask?
- Problemas de AsyncTasks múltiples en Android Spinner
- Cancelar AsyncTask cuando el usuario presiona el botón Atrás
- Android relanzando temporizadores después de que se cancelen
- Cómo manejar AsyncTask en ActionBarActivity Fragmentos cuando se utiliza ViewPager?
- Developer.android.com/training proyecto bitmapfun
- Cómo cambiar el nombre del nombre de Listview Después de enviar una solicitud de servidor dentro de una clase de adaptador personalizado?
- Espera para AsyncTask ejecutado con ProgressDialog
- Android Parse JSON atascado en obtener tarea
- Android: ¿Cómo puedo sincronizar datos del servidor a mi aplicación cada 3 y 5 minutos?
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
- Error al sincronizar el archivo – Android studio (app: mergeDebugResources)
- El elemento de menú verificable de barra de acción de Android no funciona / se muestra correctamente?