1

我用简单的场景调用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();
        }

    }
4

1 回答 1

2

根据您的更新,我可以向您建议以下更改:

// 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。

于 2013-07-22T09:58:22.327 回答