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

时间:2017-07-25 19:32:15

标签: android android-intent null startactivityforresult

我有一个活动,将库存类中的布尔数组发送回我的mainGame活动。但是当onAcivityResult运行时,resultCode为0且我的数据为空。

启动库存活动:

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

结束库存活动:

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 :(烤面包机是一种创建烤面包的方法)

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

3 个答案:

答案 0 :(得分:1)

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

其次,替换

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

用这个:

Intent returnIntent = new Intent();

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

private static int SECOND_ACTIVITY_REQUEST_CODE = 2;

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

答案 1 :(得分:1)

要添加其他答案:

您的原始代码无法正常工作的原因(假设您只是依靠系统按下后退按钮完成您的活动)是活动结果已经确定了时间onPause()已执行

当您按下后退按钮时(再次假设您没有更改任何内容),系统最终会为您调用finish()Activity.finish()的来源会查找mResultCodemResultData,这些内容会在您调用setResult()时设置。然后它开始关闭你的活动。

此过程最终会调用onPause()。但到那时,活动的结果已经确定。

这就是将代码移至onBackPressed()的原因。您活动结束之前现在正在调用setResult() ,因此您需要mResultCodemResultData

答案 2 :(得分:0)

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