当startActivityForResult处于活动状态时,如何处理后退button?

我有一个简单的表单,用户可以从列表中添加,编辑和删除人员。 当用户select编辑某人时,它会执行startActivityForResult,以便在编辑完成后进行相应的更改并刷新列表。 如果用户从编辑屏幕上单击后退button,则会出现强制closures错误。

我相信这与系统期待一个结果有关,而且我没有正确地把它收集起来。 我将如何捕获这个错误?

这是当前的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; } } 

感谢您的任何帮助。

Solutions Collecting From Web of "当startActivityForResult处于活动状态时,如何处理后退button?"

首先,看看你的堆栈跟踪使用DDMS,它会告诉你什么行发生exception。

你可以在你的调用活动中做的是检查resultCode ,并在你的被调用者活动中使用setResult()来设置它。

例如,如果用户按下了resultCode,那么结果是RESULT_CANCELED 。 如果是这种情况,不要尝试从意图中提取数据。

你想在一个if语句中包装你的Activity并在访问intent的bundle之前检查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; } } } 
 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { // do your code here } }