通过Intent在Activity间传递变量时抛出NullPointerException的原因
为什么这段代码会抛出NullPointerException?
咱们先揪出问题的核心:你在MainActivity里调用getIntent().getExtras()时,这个方法有可能返回null,这时候直接调用extras.getInt("intVariableName")就会触发空指针异常。
常见原因
- 第一种最可能的情况:
MainActivity不是通过你在Redeem.java里写的那个Intent启动的。比如用户直接从桌面图标打开MainActivity,或者其他地方启动它时没有传递任何Extra参数,这时候getExtras()自然就返回null了。 - 第二种少见情况:虽然是通过目标
Intent启动,但中途有其他代码修改了Intent的Extras,导致参数丢失。
解决方法
推荐两种简单有效的处理方式:
直接使用带默认值的重载方法(最简洁)
Intent提供了getIntExtra()方法,支持直接传入默认值。如果Extra不存在或者Intent没有附加参数,会直接返回你指定的默认值,不用手动判空:int score = getIntent().getIntExtra("intVariableName", 0); // 0是默认值,可根据业务需求修改先判空再取值
如果你需要明确处理“参数缺失”的场景,可以先检查Bundle是否为null:Bundle extras = getIntent().getExtras(); int score = 0; // 初始化默认值 if (extras != null) { score = extras.getInt("intVariableName"); } // 后续可以根据score的值做对应逻辑,比如参数缺失时提示用户强制校验启动合法性(可选)
如果你的业务逻辑要求MainActivity必须从Redeem跳转过来,那可以在onCreate里做校验,参数缺失就直接关闭页面:Bundle extras = getIntent().getExtras(); if (extras == null || !extras.containsKey("intVariableName")) { finish(); return; } int score = extras.getInt("intVariableName");
内容的提问来源于stack exchange,提问作者Manas Tiwari
相关产品推荐
相关产品推荐

