当startActivityForResult处于激活状态时,我该如何处理返回按钮?

12

我有一个简单的表单,用户可以在其中添加、编辑和删除人员名单。当用户选择编辑某个人时,它会执行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;
 }
}

非常感谢您的帮助。

3个回答

14

首先,使用DDMS查看您的堆栈跟踪,它会告诉您异常发生在哪一行。

在调用活动中,您可以检查resultCode,并在被调用方活动中使用setResult()设置它。

例如,如果用户按下返回键,则resultCode将是RESULT_CANCELED。如果出现这种情况,请不要尝试从意图中提取数据。


谢谢你的帮助。我相信你已经找到了问题,但我不确定如何实现它。我在谷歌上搜索了一下,但没有找到符合我的情况的示例。这是我尝试实现的内容,但错误仍然存在。<pre><code> case ACTIVITY_EDIT: switch (resultCode) { case RESULT_OK: Long rowId = extras.getLong("_id"); if (rowId != null) { String editPerson = extras.getString("person"); mDbHelper.updatePerson(rowId, editPerson); fillData(); break; } } break; } </code></pre> 非常感谢你的帮助。 - alockrem

3
你需要在 if 语句中包装你的 Activity,并在访问意图的捆绑包之前检查 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
请先查看其他答案。这是重复的。 - Jan Doggen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接