onCreate() に次のようなコードを持つ MapActivity があります。
if(...) {
...
new FirstAsyncTask(id, this).execute((Object[]) null);
...
} else {
...
myLocationOverlay.runOnFirstFix(new Runnable() {
new SecondAsyncTask(lat, lon, ActivityName.this).execute((Object[]) null);
}
...
}
FirstAsyncTask と SecondAsyncTask はどちらも異なることを行いますが、どちらも ProgressDialog を次のように表示します。
public FirstAsyncTask(long id, Context context) {
progressDialog = new ProgressDialog(context);
}
protected void onPreExecute() {
...
progressDialog.show();
}
protected String doInBackground(Object... params) {
...
progressDialog.dismiss();
...
}
これは FirstAsyncTask で動作していますが、SecondAsyncTask への呼び出しで何を変更しても、常に次のエラーで失敗します: Looper.prepare() を呼び出していないスレッド内でハンドラーを作成できません。コンテキスト パラメーターを「this」、「ActivityName.this」、getApplicationContext()、および getBaseContext() に設定しようとしました。
私はまだAndroidにかなり慣れていないので、この「コンテキスト」の考えは私を混乱させます。FirstAsyncTask は機能するが、SecondAsyncTask は機能しないことにさらに混乱しています。このエラーが他の質問で多く言及されているのを見てきましたが、どの回答もうまくいかないようです。何か案は?
編集: SecondAsyncTask のコンストラクターで ProgressDialog が初期化されているときに、例外がスローされています。