Android alertdialog在处理程序调用webservice后多次显示
我使用简单的场景调用webservice,它工作正常,但在处理程序中获得webservice响应后,它会多次显示alertdialog 以下是Web服务调用的代码:Android alertdialog在处理程序调用webservice后多次显示,android,Android,我使用简单的场景调用webservice,它工作正常,但在处理程序中获得webservice响应后,它会多次显示alertdialog 以下是Web服务调用的代码: public void callUpdateUserInfo_WS() { if (NetworkAvailablity.checkNetworkStatus(ProfileScreen.this)) { // PREPARE URL Constant.methodU
public void callUpdateUserInfo_WS() {
if (NetworkAvailablity.checkNetworkStatus(ProfileScreen.this)) {
// PREPARE URL
Constant.methodURL = "http://admin.tvdevphp.com/goalmachine/update_profile.php";
// PREPARE REQUEST PARAMETER
ArrayList<NameValuePair> requestParaList = new ArrayList<NameValuePair>();
requestParaList.add(new BasicNameValuePair("user_id", Constant.USER_ID));
requestParaList.add(new BasicNameValuePair("first_name", name));
requestParaList.add(new BasicNameValuePair("age",age));
requestParaList.add(new BasicNameValuePair("age_visible", "Yes"));
requestParaList.add(new BasicNameValuePair("parental_status", partentalStatus));
requestParaList.add(new BasicNameValuePair("parental_status_visible", "Yes"));
requestParaList.add(new BasicNameValuePair("marital_status", maritalStatus));
requestParaList.add(new BasicNameValuePair("marital_status_visible", "No"));
requestParaList.add(new BasicNameValuePair("short_bio", bio));
requestParaList.add(new BasicNameValuePair("short_bio_visible", "Yes"));
requestParaList.add(new BasicNameValuePair("country", country));
requestParaList.add(new BasicNameValuePair("country_visible", "Yes"));
requestParaList.add(new BasicNameValuePair("zipcode", zipCode));
requestParaList.add(new BasicNameValuePair("zipcode_visible", "Yes"));
requestParaList.add(new BasicNameValuePair("avatar", ""));
requestParaList.add(new BasicNameValuePair("latest_status_update", recentUpdate));
requestParaList.add(new BasicNameValuePair("latest_status_update_visible", "Yes"));
requestParaList.add(new BasicNameValuePair("pain_scale", painLevel));
requestParaList.add(new BasicNameValuePair("pain_scale_visible", "No"));
// CALL WEBSERVICE
WebServiceCommunicator.getInstance().registerForServerResponse(
ProfileScreen.this);
WebServiceCommunicator.getInstance().callGetAppWebService(
Constant.showDialog, this.getParent(),
Constant.methodURL, this.getParent(), Constant.PID_UPDATE_USER_INFO,
false, requestParaList);
} else {
Constant.showAlertDialog(Constant.errorTitle,
Constant.MSG_CHECK_INTERNET_SETTING, this.getParent(),
false);
}
}
private Handler _handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.arg1) {
case Constant.PID_GET_USER_INFO:
if (parseResponse(msg.obj.toString(),Constant.PID_GET_USER_INFO) == true) {
} else {
runOnUiThread(new Runnable() {
public void run() {
Constant.showAlertDialog(
Constant.DIALOG_TITLE_ERROR,
"Profile not available.",
ProfileScreen.this, false);
}
});
}
break;
case Constant.PID_UPDATE_USER_INFO:
if (parseResponse(msg.obj.toString(),Constant.PID_UPDATE_USER_INFO) == true) {
/*Constant.showAlertDialog(
Constant.DIALOG_TITLE_ERROR,
"Profile updated successfully.",
ProfileScreen.this, false);*/
} else {
runOnUiThread(new Runnable() {
public void run() {
Constant.showAlertDialog(
Constant.DIALOG_TITLE_ERROR,
"Profile not updated.",
ProfileScreen.this, false);
}
});
}
break;
default:
break;
}
}
};
public static void showAlertDialog(final String title, String message,
final Context context, final boolean redirectToPreviousScreen) {
AlertDialog.Builder alertbox = new AlertDialog.Builder(context);
alertbox.setMessage(message);
//alertbox.setTitle(title);
alertbox.setNeutralButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
}
});
try{
alertbox.show();
}catch (Exception b) {
b.printStackTrace();
}
}
在上述代码中,警报对话框配置文件未更新。多次显示
警报对话框的代码:
public void callUpdateUserInfo_WS() {
if (NetworkAvailablity.checkNetworkStatus(ProfileScreen.this)) {
// PREPARE URL
Constant.methodURL = "http://admin.tvdevphp.com/goalmachine/update_profile.php";
// PREPARE REQUEST PARAMETER
ArrayList<NameValuePair> requestParaList = new ArrayList<NameValuePair>();
requestParaList.add(new BasicNameValuePair("user_id", Constant.USER_ID));
requestParaList.add(new BasicNameValuePair("first_name", name));
requestParaList.add(new BasicNameValuePair("age",age));
requestParaList.add(new BasicNameValuePair("age_visible", "Yes"));
requestParaList.add(new BasicNameValuePair("parental_status", partentalStatus));
requestParaList.add(new BasicNameValuePair("parental_status_visible", "Yes"));
requestParaList.add(new BasicNameValuePair("marital_status", maritalStatus));
requestParaList.add(new BasicNameValuePair("marital_status_visible", "No"));
requestParaList.add(new BasicNameValuePair("short_bio", bio));
requestParaList.add(new BasicNameValuePair("short_bio_visible", "Yes"));
requestParaList.add(new BasicNameValuePair("country", country));
requestParaList.add(new BasicNameValuePair("country_visible", "Yes"));
requestParaList.add(new BasicNameValuePair("zipcode", zipCode));
requestParaList.add(new BasicNameValuePair("zipcode_visible", "Yes"));
requestParaList.add(new BasicNameValuePair("avatar", ""));
requestParaList.add(new BasicNameValuePair("latest_status_update", recentUpdate));
requestParaList.add(new BasicNameValuePair("latest_status_update_visible", "Yes"));
requestParaList.add(new BasicNameValuePair("pain_scale", painLevel));
requestParaList.add(new BasicNameValuePair("pain_scale_visible", "No"));
// CALL WEBSERVICE
WebServiceCommunicator.getInstance().registerForServerResponse(
ProfileScreen.this);
WebServiceCommunicator.getInstance().callGetAppWebService(
Constant.showDialog, this.getParent(),
Constant.methodURL, this.getParent(), Constant.PID_UPDATE_USER_INFO,
false, requestParaList);
} else {
Constant.showAlertDialog(Constant.errorTitle,
Constant.MSG_CHECK_INTERNET_SETTING, this.getParent(),
false);
}
}
private Handler _handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.arg1) {
case Constant.PID_GET_USER_INFO:
if (parseResponse(msg.obj.toString(),Constant.PID_GET_USER_INFO) == true) {
} else {
runOnUiThread(new Runnable() {
public void run() {
Constant.showAlertDialog(
Constant.DIALOG_TITLE_ERROR,
"Profile not available.",
ProfileScreen.this, false);
}
});
}
break;
case Constant.PID_UPDATE_USER_INFO:
if (parseResponse(msg.obj.toString(),Constant.PID_UPDATE_USER_INFO) == true) {
/*Constant.showAlertDialog(
Constant.DIALOG_TITLE_ERROR,
"Profile updated successfully.",
ProfileScreen.this, false);*/
} else {
runOnUiThread(new Runnable() {
public void run() {
Constant.showAlertDialog(
Constant.DIALOG_TITLE_ERROR,
"Profile not updated.",
ProfileScreen.this, false);
}
});
}
break;
default:
break;
}
}
};
public static void showAlertDialog(final String title, String message,
final Context context, final boolean redirectToPreviousScreen) {
AlertDialog.Builder alertbox = new AlertDialog.Builder(context);
alertbox.setMessage(message);
//alertbox.setTitle(title);
alertbox.setNeutralButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
}
});
try{
alertbox.show();
}catch (Exception b) {
b.printStackTrace();
}
}
根据您的更新,我可以向您建议以下更改:
// Next two lines will go at the top of the class Constant
static AlertDialog.Builder alertbox;
static AlertDialog alertDialog;
....
.... // Other code
....
public static void showAlertDialog(final String title, String message,
final Context context, final boolean redirectToPreviousScreen) {
if (alertDialog != null && alertDialog.isShowing()) {
// A dialog is already open, wait for it to be dismissed, do nothing
} else {
alertbox = new AlertDialog.Builder(context);
alertbox.setMessage(message);
//alertbox.setTitle(title);
alertbox.setNeutralButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
alertDialog.dismiss()
}
});
alertDialog = alertbox.create();
alertDialog.show();
}
}
此代码检查屏幕上是否已显示AlertDialog。如果是,它什么也不做。否则,它将使用收到的参数创建一个新的AlertDialog。您可以发布类
常量的代码吗?如果类太大,只需发布方法showAlertDialog()
Hi-vikram的代码。我已经更新了我的代码。性能方面,你不认为这是一个黑客行为吗?除非您有非常具体的理由在这里使用处理程序,否则我将使用webservice调用的异步任务。@AadiDroid似乎您想对这个问题进行评论。我不知道为什么ricintech
选择了处理程序而不是异步任务。我的解决方案也是一种变通方法。它并没有解决问题,只是解决了问题。我本想对你的答案发表评论,但我想把它放在唯一的位置!顺便说一句,你只是让一个循环绕过显示代码,但是的,正如你所说的,只处理这个问题。