当onActivityResult为运行 resultCode为0且data为null时

When onActivityResult is ran resultCode is 0 and data is null

我有一个 activity 可以将一个布尔数组从我的库存 class 发送回我的主游戏 activity。但是onAcivityResult运行时resultCode为0,我的数据为null。

开始清点activity:

@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    public void openInventory(View V) {
        Intent bag = new Intent(MainGame.this, Inventory.class);
        bag.putExtra(booInventory, inventory);
        startActivityForResult(bag, requestItem);
    }

结束清单activity:

public void onPause(){
        Intent Item = new Intent(Inventory.this, MainGame.class);//data sent to MainGame activity
        Item.putExtra(tools, itemUsed);
        setResult(RESULT_OK, Item);
        super.onPause();
    }

onActivityResult:(toaster是创建toast的方法)

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

        if(requestCode == 2){
            if(resultCode == RESULT_OK){
                toaster("result is ok", 500);
            }

            if(data != null){
                toaster("it worked", 1500);
            }else{
                toaster("FAIL!", 1500);
            }
}

首先,您不应该在 onPause() 中这样做。

其次,替换

Intent Item = new Intent(Inventory.this, MainGame.class) 

有了这个:

Intent returnIntent = new Intent();

奖励:为代码使用静态变量,例如:

private static int SECOND_ACTIVITY_REQUEST_CODE = 2;

并在您的方法中使用该变量。

onPause() 可能不是使用 setResult 的好地方。我曾经有一个按钮来运行我用来设置结果的方法。像这样:

public void confirmResults(Item item) {
    Intent intent = new Intent();
    intent.putExtra("result",item);
    setResult(RESULT_OK, intent);
    finish();
}

此外,请验证此行中的 requestItem = 2

startActivityForResult(bag, requestItem);

添加到其他答案:

您的原始代码不起作用的原因(假设您只是依靠系统在您按下后退按钮时为您完成 activity)是 activity 结果已在 onPause() 执行时确定

当您按下后退按钮时(同样,假设您没有进行任何更改),系统最终会为您调用 finish()Activity.finish() 的来源查找 mResultCodemResultData,它们是在您调用 setResult() 时设置的。然后它开始关闭您的 activity。

这个过程最终会调用onPause()。不过到时候,activity的结果已经确定了。

这就是将您的代码移至 onBackPressed() 的原因。您现在调用 setResult() before activity 完成,因此 mResultCodemResultData 是您想要的。