在Activity完成后,onActivityResult()将Intent数据作为null

时间:2011-06-12 15:45:58

标签: android

您好我在调用startActivityForResult()并尝试在onAcvityResult()方法中处理结果。但是,Intent数据为null,结果为RESULT_CANCELED。我不知道为什么会这样。

我正在创建活动:

startActivityForResult(new Intent(this, Class.class),LIST_RESULT);

然后在Activity类

@Override
public void onBackPressed() {
    super.onBackPressed();

    Intent data = new Intent();
    Bundle bundle = new Bundle();

    bundle.putParcelable("name", la);
    data.putExtras(bundle);

    if (getParent() == null) {
        setResult(Activity.RESULT_OK, data);
    } else {
        getParent().setResult(Activity.RESULT_OK, data);
    }

    //finish();
}

完成()无效。事实上,我在LogCat中收到重复完成请求HistoryRecord

的警告

我正在处理结果:

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

    switch(requestCode) {
    case(LIST_RESULT):
        if(resultCode == Activity.RESULT_OK) {
            previousList = data.getExtras();
        }
    break;
    }

}

data为null,resultCode为Action.RESULT_CANCELED。

为什么我没有通过任何想法?在我设置和阅读它之间有什么改变吗?返回结果的活动中的mParent也为null。

亚历

2 个答案:

答案 0 :(得分:28)

亚历,

我认为您要在finish()方法中移除被叫onBackPressed(),并将其替换为super.onBackPressed()的号召。我相信拨打super.onBackPressed()的电话正在呼叫结束,您永远不会有机会拨打setResult()

...试

@Override
public void onBackPressed() {

    Intent data = new Intent();
    Bundle bundle = new Bundle();

    bundle.putParcelable("name", la);
    data.putExtras(bundle);

    if (getParent() == null) {
        setResult(Activity.RESULT_OK, data);
    } else {
        getParent().setResult(Activity.RESULT_OK, data);
    }

    super.onBackPressed();
}

答案 1 :(得分:0)

我查看了提出的解决方案和原始问题示例。在我的情况下,上面的相同错误是重用相同的requestCode值。

注意使用startActivityForResult的requestCode,每个Activity调用都应该有不同的requestCode。

如果您重复使用或不注意requestCode对每个Activity调用都是唯一的,您将收到以下错误消息:

“onActivityResult()在Activity完成后将Intent数据设为null”或“传递结果ResultInfo失败”。

为每个startActivityForResult使用变量定义,以确保清晰。离。

public static final int INITIATIVE_REQUEST = 11

      Use a unique number for each of startActivityForResult.  

再次对多个活动重复相同的requestCode将导致上述消息。