onclickメソッド内にデイジーチェーン接続された一連のAlertDialogがあります。最後の1つでは、URLに呼び出しを送信し、応答を待つ必要があります。応答が戻ってきたら、応答のメッセージを受け取り、最後のAlertDialogを作成する必要があります。問題は、これが2.3 Androidで機能することですが、REST http呼び出しがUIスレッドで実行されるため、Android4.0への最新の変更でエラーが発生します。そこで、これをAsyncTaskに移動したいと思います。チュートリアルを読みましたが、特定のジレンマが見つかりませんでした。これが私のコードです:AlertDialogに応答を待機させ、待機中にProgressDialogまたはSpinnerを表示させるにはどうすればよいですか?AsyncTaskが一般的な呼び出しであり、REST呼び出しの他の状況で使用できるエレガントなものを探しています。
public void onClick(View view) {
if(alert != null && alert.isShowing()) {
break;
}
alert = new AlertDialog.Builder(this)
.setTitle(getResources().getString(R.string.alertPingTitle1).toString())
.setMessage(getResources().getString(R.string.alertPingMessage1).toString())
.setPositiveButton(getResources().getString(R.string.alertPingPositive1).toString(),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (onClicked) {
log.info("Preventing multiple clicks to Ping Node Id");
return;
}
onClicked = true;
String returnMessage = "";
int iconId = 0;
try {
String url = String.format(getResources().getString(R.string.urlIdPing).toString(), getRestUrl(), getId() );
// This is where the Rest call will happen in an AsyncTask
AsyncRest rest = new AsyncRest( Preferences.this );
rest.execute( new RestObject(type,null,null,true,false) );
..........................
// This is the current state of the 2.3 code
JSONObject sent = RestRequest.sendPost(RestHttp.createHttpClient(), url, null, true);
if (sent != null && sent.getInt("response") == 200) {
returnMessage = "VALID REST call ";
iconId = android.R.drawable.ic_dialog_info;
} else {
if (sent != null) {
returnMessage = "INVALID REST response " + "\n\n Response code: " + sent.getInt("response");
} else {
returnMessage = "INVALID REST call.";
}
iconId = android.R.drawable.ic_dialog_alert;
}
} catch(JSONException e) {
returnMessage = "Errored in JSON payload.";
}
alert = new AlertDialog.Builder(SetPreferences.this)
.setTitle(getResources().getString(R.string.alertPingTitle2).toString())
.setMessage(returnMessage)
.setIcon(iconId)
.setPositiveButton(getResources().getString(R.string.alertOkay).toString(),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {}
}).show();
}
})
}).show();
onClicked = false;
}