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
相关产品推荐
相关产品推荐

