Android Studio中ReceiverBundle.getString行出现NullPointerException的原因是什么
NullPointerException报错原因分析
报错代码行String summaryResult = ReceiverBundle.getString("summaryResult");触发空指针的核心原因是ReceiverBundle对象本身为null,而非取值操作异常,具体原因和修复方案如下:
问题根因
- 发送端重复启动目标Activity:你在点击事件中先后两次启动
UserRegistration1,第一次启动的senderIntent携带了Bundle参数,第二次启动的intent没有携带任何参数。第二次启动的Activity触发onCreate时,调用getExtras()会直接返回null,未判空直接调用方法就会触发空指针。 - 接收端未做空值防护:未判断
ReceiverBundle是否为空就直接调用其方法,就算没有重复启动的问题,当Activity被系统回收后重建、或者发送端未传参时,getExtras()也可能返回null,同样会触发报错。 - 潜在风险:发送端存入Bundle的
summaryResult变量如果本身为null,即便Bundle不为空,取出的值也为null,后续使用该变量时也可能触发空指针。
修复方案
- 删除发送端多余的启动代码,仅保留一次带参数的启动逻辑:
删除以下两行代码即可:
Intent intent = new Intent(getApplicationContext(), UserRegistration1.class); startActivity(intent);
- 接收端增加空值校验,优化取值逻辑:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.UserRegistration1); Intent ReceiverIntent = getIntent(); Bundle ReceiverBundle = ReceiverIntent.getExtras(); // 先给默认值,避免空指针 String summaryResult = ""; if (ReceiverBundle != null) { // getString第二个参数为默认值,就算对应key的值为空也会返回默认值 summaryResult = ReceiverBundle.getString("summaryResult", ""); } Toast.makeText(userRegistration1.this, "Getting the summary result: " +summaryResult, Toast.LENGTH_LONG).show(); }
- 可选优化:发送端存入参数前先判断
summaryResult是否为空,避免存入无效空值。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

