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

Android连接两个Activity后出现Button空指针异常,求错误定位及解决方案

报错定位

报错触发行是MainActivity2.java中b1.setOnClickListener(new View.OnClickListener() {...}这一行,根本原因是执行b1 = findViewById(R.id.button)时返回了null,按钮对象未被正确初始化。

错误原因

  • 核心错误:MainActivity2的onCreate方法中错误加载了R.layout.activity_main布局,而你贴出的布局文件是MainActivity2对应的布局(文件名为activity_main2.xml),在错误布局中找不到id为button的控件,导致b1为空。
  • 附加错误:代码中textView = findViewById(R.id.text)与XML布局中定义的TextView id@+id/textview不匹配,就算布局加载正确也会找不到该控件。

修复方案

修改MainActivity2.java的onCreate方法,两处修改点如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 修改点1:加载MainActivity2对应的布局文件
    setContentView(R.layout.activity_main2);
    ed1 = findViewById(R.id.editText);
    b1 = findViewById(R.id.button);
    // 修改点2:匹配XML中定义的TextView id
    textView = findViewById(R.id.textview);
    mseekbar = findViewById(R.id.seek_bar_speed);

    t1 = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
        @Override
        public void onInit(int status) {
            if (status != TextToSpeech.ERROR) {
                t1.setLanguage(Locale.US);
            }
        }
    });

    b1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String toSpeak = ed1.getText().toString();
            float speed = (float) mseekbar.getProgress() / 50;

            t1.setSpeechRate(speed);
            Toast.makeText(MainActivity2.this.getApplicationContext(), toSpeak, Toast.LENGTH_SHORT).show();
            t1.speak(toSpeak, TextToSpeech.QUEUE_FLUSH, null);
        }
    });
}

注意:如果你的MainActivity2对应的布局文件名不是activity_main2.xml,请将setContentView的参数替换为你实际的布局文件名对应的R值。

内容的提问来源于stack exchange,提问作者user17463763

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:36:03