问题 当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;
 }
}

感谢您的任何帮助。


11537
2017-08-22 15:49


起源



答案:


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

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

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


12
2017-08-22 16:00



感谢您的帮助。我相信你发现了问题,但我不确定如何实现它。我搜索了谷歌,找不到符合我情景的例子。这是我试图实现的,但错误仍然存​​在。 <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();打破;打破} </ code> </ pre>感谢您的帮助。 - alockrem


答案:


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

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

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


12
2017-08-22 16:00



感谢您的帮助。我相信你发现了问题,但我不确定如何实现它。我搜索了谷歌,找不到符合我情景的例子。这是我试图实现的,但错误仍然存​​在。 <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();打破;打破} </ code> </ pre>感谢您的帮助。 - alockrem


您希望将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
2018-04-01 00:56





@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK)
    {
        // do your code here
    }
}

-2
2018-01-02 13:54



请先查看其他答案。这是重复的。 - Jan Doggen