Android alertdialog在处理程序调用webservice后多次显示

Android alertdialog在处理程序调用webservice后多次显示,android,Android,我使用简单的场景调用webservice,它工作正常,但在处理程序中获得webservice响应后,它会多次显示alertdialog 以下是Web服务调用的代码: public void callUpdateUserInfo_WS() { if (NetworkAvailablity.checkNetworkStatus(ProfileScreen.this)) { // PREPARE URL Constant.methodU

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

以下是Web服务调用的代码:

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
选择了处理程序而不是异步任务。我的解决方案也是一种变通方法。它并没有解决问题,只是解决了问题。我本想对你的答案发表评论,但我想把它放在唯一的位置!顺便说一句,你只是让一个循环绕过显示代码,但是的,正如你所说的,只处理这个问题。