2010-08-22 10 views
11

Tengo un formulario simple donde un usuario puede agregar, editar y eliminar personas de una lista. Cuando un usuario ha elegido editar a una persona, ejecuta startActivityForResult para que pueda realizar los cambios apropiados y actualizar la lista una vez que se completa la edición. Si el usuario hace clic en el botón Atrás desde la pantalla de edición aparece un error de cierre forzado.¿Cómo manejo el botón Atrás cuando startActivityForResult está activo?

Creo que tiene algo que ver con el sistema que espera un resultado, y no lo estoy atrapando correctamente. ¿Cómo atraparía este error?

Este es el código onActivityResult actualmente en vigor:


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
super.onActivityResult(requestCode, resultCode, intent); 
Bundle extras = intent.getExtras(); 
switch(requestCode) { 
case ACTIVITY_CREATE: 
    String person = extras.getString("person"); 
    mDbHelper.addPerson(person); 
    fillData(); 
    break; 
case ACTIVITY_EDIT: 
    Long rowId = extras.getLong("_id"); 
    if (rowId != null) { 
    String editPerson = extras.getString("person"); 
    mDbHelper.updatePerson(rowId, editPerson); 
    } 
    fillData(); 
    break; 
} 
} 

Gracias por cualquier ayuda.

Respuesta

12

Antes que nada, observe su rastro de pila usando DDMS, le dirá en qué línea se está produciendo la excepción.

Lo que puede hacer en su actividad de llamada es verificar el resultCode, y en su actividad de llamada establecerlo usando setResult().

Por ejemplo, si el usuario presionó hacia atrás el código de resultado será RESULT_CANCELED. Si este es el caso, no intente extraer datos del intento.

+0

Gracias por su ayuda. Estoy seguro de que ha encontrado el problema, pero no estoy seguro de cómo implementarlo. Busqué en google y no pude encontrar un ejemplo que coincidiera con mi escenario. Esto es lo que intenté implementar, pero el error aún existe.

 case ACTIVITY_EDIT: \t switch (resultCode) { \t case RESULT_OK: \t \t Long rowId = extras.getLong("_id"); \t \t if (rowId != null) { \t \t \t String editPerson = extras.getString("person"); \t \t \t mDbHelper.updatePerson(rowId, editPerson); \t \t \t fillData(); \t \t \t break; \t \t } \t } \t break; } 
Gracias por su gran ayuda. – alockrem

2

desea ceñir su actividad en una sentencia if y comprobar resultCode antes de acceder paquete de la intención:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
super.onActivityResult(requestCode, resultCode, intent); 

// Add this line: 
if (resultCode == RESULT_OK) { 
Bundle extras = intent.getExtras(); 
switch(requestCode) { 
case ACTIVITY_CREATE: 

    break; 
case ACTIVITY_EDIT: 

    break; 
} 
} 
} 
-2
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK) 
    { 
     // do your code here 
    } 
} 
+1

Mire primero otras respuestas. Este es un duplicado –

Cuestiones relacionadas