You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:06:01