2010-08-22 20 views
11

Mam prosty formularz, w którym użytkownik może dodawać, edytować i usuwać osoby z listy. Gdy użytkownik zdecyduje się na edycję osoby, uruchamia startActivityForResult, dzięki czemu może dokonać odpowiednich zmian i odświeżyć listę po zakończeniu edycji. Jeśli użytkownik kliknie przycisk Wstecz na ekranie edycji, pojawi się komunikat o błędzie zamknięcia.Jak obsługiwać przycisk Wstecz, gdy aktywna jest funkcja startActivityForResult?

Uważam, że ma to coś wspólnego z systemem, który oczekuje wyniku, i nie łapię go właściwie. Jak złapię ten błąd?

Oto kod onActivityResult obecnie w miejscu:


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

Dziękuję za wszelką pomoc.

Odpowiedz

12

Przede wszystkim spójrz na swój ślad stosu za pomocą DDMS, pokaże ci, w której linii występuje wyjątek.

Co można zrobić w ramach wywoływania, należy sprawdzić pod kątem resultCode, aw ustawieniach aktywności kalejdowej ustaw go za pomocą setResult().

Na przykład, jeśli użytkownik nacisnął ponownie, kod wynikowy będzie RESULT_CANCELED. W takim przypadku nie próbuj wyodrębniać danych z intencji.

+0

Dziękuję za pomoc. Jestem pewien, że znalazłeś problem, ale nie jestem pewien, jak go wdrożyć. Szukałem google i nie mogłem znaleźć przykładu pasującego do mojego scenariusza. Oto, co próbowałem zaimplementować, ale błąd nadal istnieje.

 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; } 
Dziękuję za całą pomoc. – alockrem

2

Chcesz owinąć swoją aktywność w instrukcji if i sprawdzić ResultCode przed uzyskaniem dostępu wiązkę zamiarem jest:

@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

Najpierw sprawdź inne odpowiedzi. To jest duplikat. –

Powiązane problemy