MainActivity已泄露窗口

时间:2012-10-09 06:58:19

标签: android

我是Android的新手,我在7天前就开始了。我收到了这种类型的错误,并且在同一个论坛中引用了大部分主题,询问了类似的问题,但没有得到如何解决。

这是我的代码:

class CreateNewCustomer extends AsyncTask<String, String, String> {

      @Override
      protected void onPreExecute() {
              super.onPreExecute();
              pDialog = new ProgressDialog(MainActivity4.this);
              pDialog.setMessage("Creating Customer..");
              pDialog.setIndeterminate(false);
              pDialog.setCancelable(true);
              pDialog.show();
      }

      @Override
      protected String doInBackground(String...args) {
              String fname = inputFName.getText().toString();
              String lname = inputLName.getText().toString();
              String phone = inputPhone.getText().toString();

              List<NameValuePair> params = new ArrayList<NameValuePair>();
              params.add(new BasicNameValuePair("fname", fname));
              params.add(new BasicNameValuePair("lname", lname));
              params.add(new BasicNameValuePair("phone", phone));
              JSONObject json = jsonParser.makeHttpRequest(url_create_customer,
                                                           "POST", params);
              Log.d("Create Response", json.toString());

              try {
                      int success = json.getInt(TAG_SUCCESS);
                      if (success == 1) {
                              Intent i = new Intent(getApplicationContext(),MainActivity5.class );
                              startActivity(i);
                              finish();
                      } else {
                              // This is the Else part
                      }
              } catch (JSONException e) {
                      e.printStackTrace();
              }
              return null;
      }

      @Override
      protected void onPostExecute(String file_url) {
              pDialog.dismiss();
      }

}

2 个答案:

答案 0 :(得分:3)

在这部分:

if (success == 1) {
    Intent i = new Intent(getApplicationContext(),
                          MainActivity5.class );
    startActivity(i);
    finish();
}

在致电finish()之前,您需要关闭进度对话框。它没有被解雇,因此窗口被泄露,导致异常。

请改用此代码:

if (success == 1) {
    Intent i = new Intent(getApplicationContext(), MainActivity5.class );
    startActivity(i);
    pDialog.dismiss();
    finish();
}

此外,从onPostExecute()开始您的新活动,而不是doInBackground()。使用标记检查您的活动是否成功,并在onPostExecute()中开始新活动,如下所示:

@Override
protected String doInBackground(String...args) {
    //...
    if (success == 1) {
        successFlag=true;
    }
    //...

}

@Override
protected void onPostExecute(String file_url) {
    if(successFlag=true) {
        Intent i = new Intent(getApplicationContext(), MainActivity5.class );
        startActivity(i);
        pDialog.dismiss();
        finish();
    }
}

答案 1 :(得分:0)

永远不要在doInBackground()中执行startActivity。

在onPostExecute()

中关闭进度对话框后执行startActivity