31

有人可以告诉我为什么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");

4

3 回答 3

39

在调用之前确保您的第二个活动没有完成

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

即你应该在, , , ... etcsetResult之前打电话onPauseonStoponDestroyfinish

于 2013-05-10T10:13:54.383 回答
27

在这里发布作为一个可能的答案虽然可能不是你的问题

确保您的活动返回传递回来是这样的:

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,则将阻止返回意图的机会。这可能是你的问题

于 2013-05-10T10:27:42.007 回答
-2

在完成它时,您必须将一些数据从被调用返回Activity到调用。Activity

于 2013-05-10T10:32:03.897 回答