4

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

}
4

2 回答 2

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();
    }
}
于 2012-10-09T07:01:33.730 回答
0

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

在 onPostExecute() 中关闭进度对话框后执行 startActivity

于 2012-10-09T07:32:51.213 回答