繁体   English   中英

Activity 完成后,onActivityResult() 的 Intent 数据为 null

[英]onActivityResult() has Intent data as null after an Activity has finished

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

我正在创建活动:

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

然后在活动 class

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

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;
    }

}

数据是 null,结果代码是 Action.RESULT_CANCELED。

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

亚历克斯

亚历克斯,

我认为您想在onBackPressed()方法中删除对finish()的调用,并将其替换为对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();
}

我查看了建议的解决方案和原始问题示例。 就我而言,上面的相同错误是重用相同的 requestCode 值。

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

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

“活动完成后,onActivityResult() 的 Intent 数据为 null”或“传递结果 ResultInfo 失败”。

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

公共 static 最终 int INITIATIVE_REQUEST = 11

      Use a unique number for each of startActivityForResult.  

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM