さまざまなアクティビティを持つ Android アプリケーションがあり、それらはすべて Web ソースからデータを取得します。これは、Runnable を実装し、アクティビティをオブジェクトとして持つスレッドを作成することによって行われます。基本クラスは次のようになります。
public ActivityX extends Activity implements Runnable {
@Override
public onResume() {
super.onResume();
Thread someThread = new Thread(this);
someThread.start();
}
@Override
public run() {
try {
// pull web content
}
catch(TimeOutException e) {
// >>> create dialog here <<<
// go back to another activity
}
}
}
タイムアウト ダイアログを返し、次のように show() を呼び出す静的メソッドを使用してダイアログ ヘルパー クラスを作成しようとしました。
HelperClass.getTimeOutDialog().show();
しかし問題は、別のスレッドにあるため、run() メソッド内から呼び出すことができないことです。実行しようとすると、次のような実行時例外が発生します。
Looper.prepare() を呼び出していないスレッド内でハンドラーを作成できません
私はほぼ十数のアクティビティに対してこのダイアログを実行する必要があり、実際には Handler オブジェクトを使用してメッセージを送信し、毎回ダイアログを呼び出すようにしたいと考えています。これを行う簡単な方法はありませんか?残念ながら今のところ思いつきません。
私のコードは次のようになります。
handler.handleEmptyMessage(1);
これは、ハンドラーを呼び出すことです。そして、以下はメッセージを処理します:
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if(msg.what == 1) {
// show dialog here
}
}
};
乾杯