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