我有一个简单的表单,用户可以从列表中添加,编辑和删除人员。当用户选择编辑某个人时,它会执行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;
}
}
感谢您的帮助。
答案 0 :(得分:12)
首先,使用DDMS查看堆栈跟踪,它将告诉您异常发生在哪一行。
您可以在通话活动中执行的操作是检查resultCode
,并在您的被叫活动中使用setResult()
设置它。
例如,如果用户按下了resultCode,则为RESULT_CANCELED。如果是这种情况,请不要尝试从意图中提取数据。
答案 1 :(得分:2)
您希望将Activity包装在if语句中并在访问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;
}
}
}
答案 2 :(得分:-2)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK)
{
// do your code here
}
}