android activitygroup中的WindowManagerBadTokenException

时间:2013-06-29 13:01:10

标签: android

我正在尝试拨打网络服务,但按钮点击时没有发生任何事情。我正在使用 activtygroup我已尝试过两种类型的上下文child和parent但它不起作用。 它显示 WindowManagerBadTokenException

以下是我调用webservice的代码:

//GET USER WEBSERVICE
    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", "1"));
            requestParaList.add(new BasicNameValuePair("first_name", "Ricky"));
            requestParaList.add(new BasicNameValuePair("age", "0"));
            requestParaList.add(new BasicNameValuePair("age_visible", "Yes"));
            requestParaList.add(new BasicNameValuePair("parental_status", "Yes"));
            requestParaList.add(new BasicNameValuePair("parental_status_visible", "Yes"));
            requestParaList.add(new BasicNameValuePair("marital_status", "Single"));
            requestParaList.add(new BasicNameValuePair("marital_status_visible", "No"));
            requestParaList.add(new BasicNameValuePair("short_bio", "Hard working"));
            requestParaList.add(new BasicNameValuePair("short_bio_visible", "Yes"));
            requestParaList.add(new BasicNameValuePair("country", "India"));

            requestParaList.add(new BasicNameValuePair("country_visible", "Yes"));
            requestParaList.add(new BasicNameValuePair("zipcode", "452001"));
            requestParaList.add(new BasicNameValuePair("zipcode_visible", "Yes"));
            requestParaList.add(new BasicNameValuePair("avatar", ""));

            requestParaList.add(new BasicNameValuePair("latest_status_update", "In Indore India."));
            requestParaList.add(new BasicNameValuePair("latest_status_update_visible", "Yes"));
            requestParaList.add(new BasicNameValuePair("pain_scale", "50"));
            requestParaList.add(new BasicNameValuePair("pain_scale_visible", "No"));

            // CALL WEBSERVICE
            WebServiceCommunicator.getInstance().registerForServerResponse(
                    (IServerResponse)this.getParent());
            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);
        }
    }

这是网络服务的东西:

public void callGetAppWebService(final Boolean showProgressBar,
            final Context childContext, final String url,
            final Context context, final int processid,
            final boolean isFinishForFailResponse,
            final ArrayList<NameValuePair> requestParaList) {
        if (_progressDialog != null && _progressDialog.isShowing()) {
            _progressDialog.cancel();
        }
        if (showProgressBar) {
            _progressDialog = ProgressDialog
                    .show(context, "", "Please wait...");

        }
        _context = childContext;
        _isFinishForFailResponse = isFinishForFailResponse;
        new Thread(new Runnable() {
            public void run() {
                Looper.prepare();
                try {
                    if (NetworkAvailablity.checkNetworkStatus(context)) {
                        String jsonResponse = WebService.postData(url,
                                requestParaList);
                        if (jsonResponse != null && jsonResponse.length() != 0) {
                            strResponse = jsonResponse;
                            Log.v("response", strResponse);
                        }

                    } else {

                    }
                } catch (Exception e) {
                    // DebugLog.LOGE("Exception from callWebService():" +
                    // e.toString());
                }
                if (showProgressBar)
                    _progressDialog.cancel();
                handleResponse(strResponse, processid);
            }
        }).start();
    }

1 个答案:

答案 0 :(得分:0)

我认为这是因为在Thread您尝试取消progressDialog。 Android不允许您从另一个线程修改UI线程。

更好的方法是使用AsyncTask(而不是Thread),并覆盖3种方法:

onPreExecute() - 显示对话框,在UI线程上运行
doInBackground() - 发出http请求,在单独的线程中运行
onPostExecute() - 隐藏对话框,在UI线程上运行。

在Google中搜索,有很多示例如何使用AsyncTask