Android onActivityResult接收回传Intent extras始终为null引发异常
问题原因与修复方案
崩溃根因
错误日志显示返回的Intent已经携带了附加数据,不存在extras读取失败的问题,崩溃完全来自StartToWiez的变量未初始化:
- 你在
StartToWiez中声明的player1Score/player2Score/player3Score/player4Score为包装类Integer,未赋值时默认值为null - 首次执行
onActivityResult中的player1Score += data.getIntExtra(...)时,Java会自动对包装类做拆箱操作,调用null.intValue()直接抛出空指针,完全匹配错误日志的报错栈。
额外潜在问题
StartRound中计算得分的switch块为空,未给score数组的4个元素赋值,当前所有回传的得分都是默认的0,计分逻辑无实际效果- 直接复用
getIntent()(启动当前Activity的Intent)作为返回Intent的写法不规范,会冗余携带启动时的附加数据,建议新建空Intent用于返回
修复代码参考
1. 修复得分变量的空指针问题
将StartToWiez中的成员变量声明从:
Integer player1Score; Integer player2Score; Integer player3Score; Integer player4Score;
改为基本类型,避免拆箱空指针:
int player1Score = 0; int player2Score = 0; int player3Score = 0; int player4Score = 0;
2. 规范返回Intent的写法
将StartRound中按钮点击事件里的返回逻辑从:
Intent returnIntent = getIntent(); returnIntent.putExtra("Player1Score", score[0]); returnIntent.putExtra("Player2Score", score[1]); returnIntent.putExtra("Player3Score", score[2]); returnIntent.putExtra("Player4Score", score[3]); setResult(RESULT_OK, returnIntent);
改为新建独立空Intent:
Intent returnIntent = new Intent(); returnIntent.putExtra("Player1Score", score[0]); returnIntent.putExtra("Player2Score", score[1]); returnIntent.putExtra("Player3Score", score[2]); returnIntent.putExtra("Player4Score", score[3]); setResult(RESULT_OK, returnIntent);
3. 补全得分计算逻辑
在StartRound的switch(gametypetest)分支中,根据不同游戏规则给score数组的4个元素赋值,否则回传的得分始终为0,计分表格无法正常统计。
内容的提问来源于stack exchange,提问作者Kristijn
相关产品推荐
相关产品推荐

