我有一个应用程序做了一些长时间的计算,并且我希望在完成时显示进度对话框。到目前为止,我发现我可以用线程/处理程序来完成这个工作,但是没有工作,然后我发现AsyncTask
。将参数传递给AsyncTask,并返回结果
在我的应用程序中,我使用带有标记的贴图,并且实现了onTap函数来调用我定义的方法。该方法使用“是/否”按钮创建对话框,如果单击“是”,我想调用AsyncTask
。我的问题是如何通过ArrayList<String>
到AsyncTask
(并在那里工作),以及如何从AsyncTask
得到一个新的ArrayList<String>
?
方法的代码如下所示:
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);
所以,你看,我想发送的字符串数组列表“传递”到AsyncTask
,并得到了“结果”的字符串数组列表返回。而calc_stanica AssycTask
类看起来是这样的:
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();
}
所以我的问题是如何获得在AsyncTask doInBackground
方法的“传递”数组列表中的元素(并使用它们),以及如何返回一个数组列表在主要方法(“结果”数组列表)中使用?
谢谢你的回答,但我还有一件事要问。如果我定义int min = Integer.parseInt(minim);例如,在AsyncTask类onPostExecute()中,我如何从我的主类方法访问它?当我像这样改变它时,在主类方法中出现“min不能解决”错误。 – 2010-11-16 16:35:18
@Bojan Ilievski:让你的min变量全局。 – Wroclai 2010-11-16 16:55:25
再次感谢您的答案,我已经解决了我的问题... – 2010-11-16 21:18:31