onActivityResult()Intent数据始终为null

时间:2013-05-10 10:10:46

标签: android

有人可以告诉我为什么Intent data总是空的吗?

@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");

3 个答案:

答案 0 :(得分:34)

在致电

之前,请确保您的第二项活动未完成
setResult(RESULT_OK, getIntent().putExtra(ProfileActivity.USER_DATA_EXTRA, constructUser()));

即。您应该在setResultonPauseonStoponDestroy ...之前致电finish等等

答案 1 :(得分:22)

虽然可能不是您的问题,但在此处发布可能不是您的问题

确保您的活动返回传回这样的内容:

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();

我花了很长时间来回复null意图。对我来说这是因为在onBackPressed中我在上面的代码之前调用了super.onBackPressed()。当我把它放在一切都很好的时候。如果过早调用onStop / onDestroy,则会阻止传递意图的机会。这可能是您的问题

答案 2 :(得分:-2)

完成后,您必须将来自被叫Activity的一些数据返回到调用Activity