我有一個應用程序做了一些長時間的計算,並且我希望在完成時顯示進度對話框。到目前爲止,我發現我可以用線程/處理程序來完成這個工作,但是沒有工作,然後我發現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