長い計算を行うアプリケーションがあり、実行中に進行状況ダイアログを表示したいと考えています。これまでのところ、スレッド/ハンドラーでこれを実行できることがわかりましたが、機能しませんでしたAsyncTask
。
私のアプリケーションでは、マーカー付きのマップを使用し、定義したメソッドを呼び出す onTap 関数を実装しました。AsyncTask
このメソッドは、はい/いいえボタンを含むダイアログを作成し、はいがクリックされた場合に呼び出したいと思います。私の質問は、 を に渡す方法ArrayList<String>
(AsyncTask
およびそこで操作する方法) と、 ?ArrayList<String>
から新しいような結果を取得する方法です。AsyncTask
メソッドのコードは次のようになります。
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_stanicaAssycTask
クラスは次のようになります。
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
方法 (およびそこで使用する方法) と、メイン メソッドで使用する配列リストを返す方法 (「結果」配列リスト) です。