gpt4 book ai didi

从处理程序调用 web 服务后,Android alertdialog 显示多次

转载 作者:行者123 更新时间:2023-11-29 21:38:21 24 4
gpt4 key购买 nike

我用简单的场景调用 web 服务,它工作正常,但在处理程序中获得 web 服务响应后,它多次显示 alertdialog。

这里是网络服务调用的代码:

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;
}
}
};

在上面的代码中,警告对话框 Profile not updated. 多次显示。

警报对话框代码:

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。

关于从处理程序调用 web 服务后,Android alertdialog 显示多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17783199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com