Reputation: 990
I have only sometimes an error which says Activity com.prueba.omnibus.EspacialTecnico has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41e794a0 that was originally added here
This happens when the activity finishes and an asynctask function is executed. I have searched but I have no idea what the problem could be.
Action that is doen when the user clicks "finish" and the error happens.
protected Dialog onCreateDialog(int id) {
super.onCreateDialog(id);
switch (id) {
case (int) DIALOG_ALERT_SALIR:
return new AlertDialog.Builder(this)
.setIcon(R.drawable.icon_warning)
.setTitle(R.string.warning)
.setMessage(R.string.confsalir)
.setPositiveButton(R.string.alert_dialog_ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
if (batteryReceiver == null){
}
else{
try{
unregisterReceiver(batteryReceiver);
}catch(IllegalArgumentException iae){
}
batteryReceiver = null;
}
Correccion();
Parseo();
reloj.cancel();
if (Titulacion.IsReachable1(getApplicationContext())){
new CreateResultados().execute();
}
EspacialTecnico.this.finish();
try {
XMLResumen.escribirXMLResume();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
})
.setNegativeButton(R.string.alert_dialog_cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
}
})
.create();
}
return null;
}
Asynctask Function Could the error be produced by the dialog?
class CreateResultados extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(EspacialTecnico.this);
pDialog.setMessage("Transfiriendo...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
protected String doInBackground(String... args) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("id", Ident.getDNI()));
params.add(new BasicNameValuePair("nombre", Nombres.getNombre()));
params.add(new BasicNameValuePair("tablet", Nombres.Tablet()));
params.add(new BasicNameValuePair("fecha", Titulacion.fecha()));
params.add(new BasicNameValuePair("test", nombre));
params.add(new BasicNameValuePair("correctas", correctasString));
params.add(new BasicNameValuePair("errores", fallosString));
params.add(new BasicNameValuePair("PC", PC));
JSONObject json = jsonParser.makeHttpRequest(url_crear_resultados,
"POST", params);
Log.d("Create Response", json.toString());
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
} else {
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
}
}
Is there anything "bad" done? Thanks for the help
Upvotes: 2
Views: 7334
Reputation: 1495
Put this code in post Execute:
private ProgressDialog pDialog;
if (pDialog.isShowing()){
pDialog.dismiss();
}
Its working for me.
Upvotes: 1
Reputation: 152807
This exception usually comes from dialogs that are still active when the activity is finishing.
In onPreExecute()
you create a new dialog but it might be so that pDialog
already holds a reference to an active dialog. Some ways around it:
Check for pDialog == null
before creating a new one. Assign a null
to pDialog
after dismissing it.
If pDialog != null
, dismiss()
it first before creating a new dialog.
(Also super.onCreateDialog()
is unnecessary as you're not doing anything with the returned Dialog
.)
Upvotes: 5
Reputation: 790
I think your problem is in
protected void onPostExecute(String file_url) {
pDialog.dismiss();
}
If your touch the dialog box after your activity is finish, an expection is raise. You have to be carefull, when your activity is finish the asynctask continue and postexecute is called.
Upvotes: 2