android activitygroup中的WindowManagerBadTokenException

android activitygroup中的WindowManagerBadTokenException,android,Android,我正在尝试调用Web服务,但在单击按钮时什么也没有发生。我正在使用 activitygroup我尝试过两种类型的上下文,即子上下文和父上下文,但都不起作用。 它显示的是WindowManagerBadtokenexException 以下是我调用Web服务的代码: //GET USER WEBSERVICE public void callUpdateUserInfo_WS() { if (NetworkAvailablity.checkNetworkStatus(Pr

我正在尝试调用Web服务,但在单击按钮时什么也没有发生。我正在使用 activitygroup我尝试过两种类型的上下文,即子上下文和父上下文,但都不起作用。 它显示的是WindowManagerBadtokenexException

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

//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();
    }
//获取用户Web服务
public void callUpdateUserInfo_WS(){
if(networkavailability.checkNetworkStatus(ProfileScreen.this)){
//准备URL
Constant.methodURL=”http://admin.tvdevphp.com/goalmachine/update_profile.php";
//准备请求参数
ArrayList requestParaList=新建ArrayList();
添加(新的BasicNameValuePair(“用户id”,“1”));
添加(新的BasicNameValuePair(“名字”,“Ricky”);
添加(新的BasicNameValuePair(“年龄”,“0”));
添加(新的BasicNameValuePair(“age_visible”,“Yes”);
添加(新的BasicNameValuePair(“家长状态”,“是”);
添加(新的BasicNameValuePair(“家长状态可见”、“是”);
添加(新的BasicNameValuePair(“婚姻状况”、“单身”);
添加(新的BasicNameValuePair(“婚姻状况可见”、“否”);
添加(新的BasicNameValuePair(“short_bio”,“Hard working”);
添加(新的BasicNameValuePair(“short_bio_visible”,“Yes”);
添加(新的BasicNameValuePair(“国家”、“印度”);
添加(新的BasicNameValuePair(“国家/地区可见”、“是”);
添加(新的BasicNameValuePair(“zipcode”,“452001”);
添加(新的BasicNameValuePair(“zipcode_可见”,“是”);
添加(新的BasicNameValuePair(“化身”);
添加(新的BasicNameValuePair(“最新状态更新”,“印度语”);
添加(新的BasicNameValuePair(“最新状态更新可见”,“是”);
添加(新的BasicNameValuePair(“疼痛量表”,“50”);
添加(新的BasicNameValuePair(“疼痛量表可见”、“否”);
//呼叫网络服务
WebServiceCommunicator.getInstance().registerForServerResponse(
(IServerResponse)this.getParent());
WebServiceCommunicator.getInstance().callGetAppWebService(
Constant.showDialog,this.getParent(),
Constant.methodURL,this.getParent(),Constant.PID\u UPDATE\u USER\u INFO,
false,请求列表);
}否则{
Constant.showAlertDialog(Constant.errorTitle,
Constant.MSG\u CHECK\u INTERNET\u设置,this.getParent(),
假);
}
}
这是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();
    }
public void callGetAppWebService(最终布尔值showProgressBar,
最终上下文childContext,最终字符串url,
最终上下文,最终int processid,
最终布尔值为FinishForFailResponse,
最终ArrayList请求列表(ParaList){
if(_progressDialog!=null&&u progressDialog.isShowing()){
_progressDialog.cancel();
}
如果(显示进度条){
_progressDialog=progressDialog
.show(上下文“,”请稍候…);
}
_上下文=儿童上下文;
_isFinishForFailResponse=isFinishForFailResponse;
新线程(newrunnable()){
公开募捐{
Looper.prepare();
试一试{
if(网络可用性。检查网络状态(上下文)){
字符串jsonResponse=WebService.postData(url,
请求列表);
if(jsonResponse!=null&&jsonResponse.length()!=0){
strResponse=jsonResponse;
Log.v(“响应”,strResponse);
}
}否则{
}
}捕获(例外e){
//LOGE(“callWebService()的异常:”+
//e.toString());
}
如果(显示进度条)
_progressDialog.cancel();
handleResponse(strResponse,processid);
}
}).start();
}

我认为这是因为在
线程中
您试图取消
进程对话框
。 Android不允许您从其他线程修改UI线程

更好的方法是使用(而不是线程),并重写3种方法:

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

在谷歌搜索中,有很多例子说明如何使用
AsyncTask