Tengo una aplicación que hace algunos cálculos largos, y me gustaría mostrar un diálogo de progreso mientras esto se hace. Hasta ahora he descubierto que podía hacer esto con hilos/manipuladores, pero no funcionó, y luego descubrí el AsyncTask
.Pasar argumentos a AsyncTask, y devolver resultados
En mi aplicación uso mapas con marcadores, y he implementado la función onTap para llamar a un método que he definido. El método crea un diálogo con los botones Sí/No, y me gustaría llamar a AsyncTask
si se hace clic en Sí. Mi pregunta es cómo pasar un ArrayList<String>
al AsyncTask
(y trabajar con él allí), y cómo obtener un nuevo ArrayList<String>
como resultado del AsyncTask
?
El código del método es similar a esto:
String curloc = current.toString();
String itemdesc = item.mDescription;
ArrayList<String> passing = new ArrayList<String>();
passing.add(itemdesc);
passing.add(curloc);
ArrayList<String> result = new ArrayList<String>();
new calc_stanica().execute(passing,result);
String minim = result.get(0);
int min = Integer.parseInt(minim);
String glons = result.get(1);
String glats = result.get(2);
double glon = Double.parseDouble(glons);
double glat = Double.parseDouble(glats);
GeoPoint g = new GeoPoint(glon, glat);
String korisni_linii = result.get(3);
Así que, como ves, me gustaría enviar la cadena serie de listas de "pasar" a la AsyncTask
, y para obtener la cadena "número" una lista de arreglos desde allí. Y la clase calc_stanica AssycTask
se ve así:
public class calc_stanica extends AsyncTask<ArrayList<String>, Void, ArrayList<String>> {
ProgressDialog dialog;
@Override
protected void onPreExecute() {
dialog = new ProgressDialog(baraj_mapa.this);
dialog.setTitle("Calculating...");
dialog.setMessage("Please wait...");
dialog.setIndeterminate(true);
dialog.show();
}
protected ArrayList<String> doInBackground(ArrayList<String>... passing) {
//Some calculations...
return something; //???
}
protected void onPostExecute(Void unused) {
dialog.dismiss();
}
Así que mi pregunta es cómo conseguir que los elementos del "paso" lista de arreglo en el método AsyncTask doInBackground
(y usarlos allí), y la forma de devolver una lista de arreglo usar en el método principal (la lista de matriz "resultado")?
Gracias por su respuesta, pero tengo una cosa más para preguntar. Si defino int min = Integer.parseInt (minim); por ejemplo, en la clase AsyncTask onPostExecute(), ¿cómo puedo acceder desde mi método de clase principal? Cuando lo cambio así, aparece el error "no se puede resolver" en el método de la clase principal. –
@Bojan Ilievski: Simplemente haz que tu variable mínima sea global. – Wroclai
Gracias a ambos por sus respuestas nuevamente, he resuelto mis problemas ... –