Android Activity跳转时为Intent设置Bundle后获取值为null问题求助
问题排查与解决方法
- 确认事件触发逻辑
首先排查Spinner的选中事件是否真的执行了R.id.BESPINNER分支的代码,你可以在startActivity之前加日志打印becourse的值,确认赋值、封装参数的代码被实际执行。如果分支未触发,跳转时不会携带任何参数,目标Activity拿到的Bundle自然为null。 - 检查启动模式与Intent生命周期
如果你在Manifest中给BEViewCourseActivity设置了singleTop、singleTask、singleInstance这类非标准启动模式,Activity复用时不会重新走onCreate生命周期,直接调用getIntent()拿到的是首次启动时的旧Intent,不会包含新传递的参数。需要额外覆写onNewIntent方法更新Intent:@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); // 此处重新获取参数更新UI即可 } - 简化传值逻辑规避中间操作问题
不需要额外创建Bundle封装单个字符串参数,直接调用Intent的putExtra方法传值,目标处直接用getStringExtra取值,减少中间步骤出错的概率。
修正后的代码示例
NewCourseActivity.java
AdapterView.OnItemSelectedListener mItemSelectedListener = new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { CourseSelected = parent.getSelectedItem().toString(); switch (view.getId()) { case R.id.BESPINNER: String becourse = parent.getSelectedItem().toString(); Intent intent = new Intent(NewCourseActivity.this, BEViewCourseActivity.class); // 直接传值,无需额外封装Bundle intent.putExtra("course", becourse); startActivity(intent); break; } } @Override public void onNothingSelected(AdapterView<?> parent) { // 空实现必须保留,避免出现意外回调问题 } };
BEViewCourseActivity.java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 注意必须先调用setContentView再调用findViewById setContentView(R.layout.你的布局文件名称); CourseSelected = findViewById(R.id.courseSelected); Intent intent = getIntent(); String selectedcourse = intent.getStringExtra("course"); if(selectedcourse != null){ CourseSelected.setText(selectedcourse); }else{ CourseSelected.setText("Failed"); } } // 仅当你设置了非standard启动模式时需要添加此方法 @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); String selectedcourse = intent.getStringExtra("course"); if(selectedcourse != null){ CourseSelected.setText(selectedcourse); }else{ CourseSelected.setText("Failed"); } }
内容的提问来源于stack exchange,提问作者Abinaya Geetha
相关产品推荐
相关产品推荐

