結果は から の メソッドに渡さdoInBag()
れonPostexecute()
ますAsyncTask
。
これで、ハンドラーを使用して、次のようにデータをアクティビティに送り返すことができます。
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (mProgressDialog != null) {
if (mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
}
}
final Message message = new Message();
if (result != null && !result.equals("")) {
if (result.equals("success")) {
message.what = 1000; // to show SUCCESS
} else {
message.what = 1001; // to show FAILURE
}
} else {
message.what = 1001; // to show FAILURE
}
mHandler.sendMessage(message);
}
編集: AsyncTask でのハンドラーの使用:
次のようにアクティビティでハンドラを宣言します。
/**
* Handler to update the UI.
*/
private static final Handler sHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 1000) {
} else {
// failure
}
}
};
アクティビティで、次のように AsyncTask を呼び出します。
YourAsyncTask obj = new YourAsyncTask(context, sHandler);
obj.execute();
AsyncTask で、次のようなコンストラクターを作成します。
public YourAsyncTask(final Context context, final Handler handler) {
this.context = context;
mHandler = handler;
}
説明:
ここでハンドラーを使用する必要があるのは、バックグラウンド操作が終了した後にアクティビティに戻って、AsyncTask の結果に基づいて他のタスクを実行する必要がある場合があるためです。ここで、ハンドラーの参照を asyncTask に渡し、最終的に結果をアクティビティに送り返します。
上記のハンドラーは静的ハンドラーであることに注意してください。そうしないと、非同期操作が完了する前にアクティビティが終了すると、メモリ リークが発生する可能性があります。