2010-08-22 5 views
11

Ich habe ein einfaches Formular, in dem ein Benutzer Personen aus einer Liste hinzufügen, bearbeiten und löschen kann. Wenn ein Benutzer eine Person bearbeiten möchte, führt er startActivityForResult aus, damit er die entsprechenden Änderungen vornehmen und die Liste aktualisieren kann, sobald die Bearbeitung abgeschlossen ist. Wenn der Benutzer auf dem Bearbeitungsbildschirm auf die Zurück-Schaltfläche klickt, wird ein Force-Close-Fehler angezeigt.Wie gehe ich mit der Zurück-Schaltfläche um, wenn StartActivityForResult aktiv ist?

Ich glaube, es hat etwas damit zu tun, dass das System ein Ergebnis erwartet, und ich fange es nicht richtig ein. Wie würde ich diesen Fehler einfangen? Hier

ist der onActivityResult Code zur Zeit an Ort und Stelle:


@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; 
} 
} 

Vielen Dank für jede Hilfe.

Antwort

12

Betrachten Sie zuerst Ihre Stack-Trace mit DDMS, es wird Ihnen sagen, in welcher Zeile die Ausnahme auftritt.

Was Sie in Ihrer Berufung Aktivität tun können, ist Prüfung für die resultCode, und in Ihrer Rufenen Aktivität legen Sie es setResult() verwenden.

Zum Beispiel, wenn der Benutzer zurück gedrückt hat, wird der Ergebniscode RESULT_CANCELED sein. Wenn dies der Fall ist, versuchen Sie nicht, Daten aus der Absicht zu extrahieren.

+0

Dank für Ihre Hilfe danken. Ich bin zuversichtlich, dass Sie das Problem gefunden haben, aber ich bin mir nicht sicher, wie Sie es implementieren. Ich suchte google und konnte kein Beispiel finden, das meinem Szenario entsprach. Hier ist, was ich versucht habe zu implementieren, aber der Fehler besteht immer noch.

 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; } 
Vielen Dank für Ihre Hilfe. – alockrem

2

Sie möchten Ihre Aktivität in einer if-Anweisung und überprüfen Result wickeln, bevor die Absicht des Bündels zugreifen:

@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

Bitte schauen Sie sich zuerst die anderen Antworten an. Dies ist ein Duplikat. –

Verwandte Themen