我有一系列在onclick方法中以菊花链方式连接的AlertDialog。在最后一个我需要发送一个URL调用并等待响应。一旦响应回来,我需要采取响应的消息并创建最后一个AlertDialog。问题是在2.3 Android中有效,但由于REST http调用在UI线程上运行,所以最新更改了Android 4.0错误。所以我想把它移到一个AsyncTask。我通读了教程,但还没有找到我的具体困境。这里是我的代码:我如何使AlertDialog等待响应,并等待显示ProgressDialog或Spinner?我在寻找优雅的地方,AsyncTask是一个通用调用,可以在其他情况下用于REST调用。Inner AlertDialog调用REST URL,我如何等待进度对话返回
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;
}
编辑的问题要问更具体的一个。我已经在使用AysyncTasks,不知道如何让警报等待AsyncTask产生回调,因为这些警报是嵌入的,并且在Activity的onClick方法中。如果需要,我也可以发布我的AsyncTask。 – JPM 2013-02-08 21:14:30
在'onPostExecute'上发出信号提示关闭或任何需要它的提示 – howettl 2013-02-08 21:15:26
我已经知道所有这些了,但是我不知道如何在async被触发时让代码中的警报等待它不会暂停UI线程。 – JPM 2013-02-08 21:19:11