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
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 thatpDialog
already holds a reference to an active dialog. Some ways around it:Check for
pDialog == null
before creating a new one. Assign anull
topDialog
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 returnedDialog
.)I think your problem is in
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.
Put this code in post Execute:
Its working for me.