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

OnActivityResult() Данные Intent всегда равны нулю

Может кто-нибудь сказать мне, почему Intent data всегда null?

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

if (resultCode == RESULT_OK) {
    if (requestCode == UPDATE_PROFILE_REQUEST_CODE) {

        if (data != null) {
            User user = (User) data.getExtras().getSerializable(USER_DATA_EXTRA);
            if (user != null) {
                notifyNeedUpdate(user);
            }
        } else {
            Log.e("Dev", "data is null");
        }

    }
}

}

и именно так я устанавливаю результат:

setResult(RESULT_OK, getIntent().putExtra(ProfileActivity.USER_DATA_EXTRA, constructUser()));

constructUser() просто создает объект, который мне нужен.

Я всегда получаю Log.e("Dev", "data is null");.

4b9b3361

Ответ 1

Перед вызовом

убедитесь, что ваше второе действие не завершено
setResult(RESULT_OK, getIntent().putExtra(ProfileActivity.USER_DATA_EXTRA, constructUser()));

то есть. вы должны называть setResult до onPause, onStop, onDestroy, finish... и т.д.

Ответ 2

Проводка здесь как возможный ответ, хотя, возможно, не ваша проблема.

Убедитесь, что возвращаемая вами активность возвращает обратно что-то вроде этого:

Intent returnIntent = new 
returnIntent.putExtra("result", app);
returnIntent.putExtra("element", element);
if (app.getStatus() == 2){
    returnIntent.putExtra("update", true);
    // Tell the parent that everything went okay
    setResult(Activity.RESULT_OK, returnIntent);
    Log.i(TAG, "Returning, Result Success");
} else {
    // Tell parent that nothing changed
    setResult(RESULT_CANCELED, returnIntent);
    Log.i(TAG, "Returning, Nothing changed");
}
finish();

Я долгое время страдал от нулевых намерений. Для меня это было потому, что в onBackPressed я вызывал super.onBackPressed() перед указанным выше кодом. Когда я положил его после того, как все отлично поработало. Если onStop/onDestroy вызывается слишком рано, то возможность передать намерение назад заблокирована. Это может быть вашей проблемой.

Ответ 3

Вы должны вернуть некоторые данные из вызываемого Activity в вызов Activity при его завершении.