2013-06-29 20 views
1

我想調用一個web服務,但沒有任何事情發生在按鈕單擊上。我正在使用 activtygroup我已經嘗試過這兩種類型的上下文子項和父項,但它不工作。 它顯示WindowManagerBadTokenExceptionAndroid活動組中的WindowManagerBadTokenException

這裏是我的代碼來調用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); 
     } 
    } 

這是Web服務的東西:

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

回答

0

我想這是因爲在你的Thread您要取消progressDialog 。 Android將不允許您從另一個線程修改UI線程。

一個更好的方法是使用一個AsyncTask(而不是線程),並覆蓋3種方法:

onPreExecute() - 顯示對話框,在UI線程上運行
doInBackground() - 使HTTP請求,運行在一個單獨的線程
onPostExecute() - 隱藏對話框,在UI線程上運行。

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