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");
.
Ответы
Ответ 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
при его завершении.