Подтвердить что ты не робот

Как обращаться с кнопкой "назад", когда активен 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;
 }
}

Спасибо за любую помощь.

4b9b3361

Ответ 1

Прежде всего, посмотрите на трассировку стека с помощью DDMS, он расскажет вам, в какой строке происходит исключение.

Что вы можете сделать в своей деятельности по вызову, это проверить для resultCode, а в вашей активности вы можете установить setResult().

Например, если пользователь нажал назад, resultCode будет RESULT_CANCELED. Если это так, не пытайтесь извлечь данные из намерения.

Ответ 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;
 }
}
}

Ответ 3

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