2010-08-22 108 views
11

我有一個簡單的表單,用戶可以從列表中添加,編輯和刪除人員。當用戶選擇編輯某人時,它會執行startActivityForResult,以便在編輯完成後進行相應的更改並刷新列表。如果用戶從編輯屏幕上單擊後退按鈕,則會出現強制關閉錯誤。當startActivityForResult處於活動狀態時,如何處理後退按鈕?

我相信它與系統預期結果有關,而且我沒有適當地捕獲它。我將如何捕獲這個錯誤?

下面是onActivityResult代碼目前到位:


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

感謝您的任何幫助。

回答

12

首先,看看你的堆棧跟蹤使用DDMS,它會告訴你什麼行發生異常。

你可以在你的通話活動中做什麼是檢查resultCode,並在你的被動活動中使用setResult()進行設置。

例如,如果用戶按回resultCode將爲RESULT_CANCELED。如果是這種情況,不要嘗試從意圖中提取數據。

+0

謝謝您的幫助。 我相信你發現了這個問題,但我不確定如何實現它。我搜索谷歌,找不到符合我的情況的例子。這是我試圖實現的,但錯誤仍然存​​在。

 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; } 
謝謝你的幫助。 – alockrem 2010-08-22 16:22:08

2

你想訪問的意圖的包之前來包裝你的活動在if語句和檢查resultCode爲:

@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

請先看看其他答案。這是重複的。 – 2016-01-02 14:13:10

相關問題