我有一个活动,将库存类中的布尔数组发送回我的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);
}
}
答案 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()
的来源会查找mResultCode
和mResultData
,这些内容会在您调用setResult()
时设置。然后它开始关闭你的活动。
此过程最终会调用onPause()
。但到那时,活动的结果已经确定。
这就是将代码移至onBackPressed()
的原因。您活动结束之前现在正在调用setResult()
,因此您需要mResultCode
和mResultData
。
答案 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);