Android Studio中IMC计算器启动报错:无法实例化Activity
问题原因
崩溃的核心原因是你在Activity布局加载完成前,就调用了findViewById并尝试获取EditText的文本内容。类成员变量会在Activity实例化时初始化,这远早于onCreate()方法执行和setContentView()加载布局的时机。此时Activity还没有视图层级,findViewById会返回null,调用getText()时就会触发空指针异常。
修复后的代码
以下是修正后的MainActivity代码:
package com.example.calculoimc; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.EditText; public class MainActivity extends AppCompatActivity { // 仅声明EditText变量,不在这里初始化 EditText nombreApellidos; EditText edad; EditText altura; EditText peso; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 在setContentView之后初始化EditText,确保视图层级已创建 nombreApellidos = findViewById(R.id.NombreApellidos); edad = findViewById(R.id.Edad); altura = findViewById(R.id.altura); peso = findViewById(R.id.peso); } public void sendData(View v) { // 点击按钮时再获取用户输入的最新内容 String name = nombreApellidos.getText().toString().replace("Nombre", ""); String edadN = edad.getText().toString().replace("Edad", ""); String alturaN = altura.getText().toString().replace("Altura", ""); String pesoN = peso.getText().toString().replace("Peso", ""); Intent i = new Intent(this, SeeResults.class); String[] info = new String[4]; info[0] = name; info[1] = edadN; info[2] = alturaN; info[3] = pesoN; i.putExtra("data", info); startActivity(i); } }
关键修复点
- 将
findViewById调用移到onCreate()方法内,且在setContentView()之后执行,确保视图层级已创建才能找到对应控件。 - 将获取EditText文本的逻辑移到
sendData()方法中,这样能获取用户点击按钮时的最新输入内容,而非Activity启动时的空值。 - 修复了
replace()方法的语法错误(补充了缺失的闭合引号和括号)。
另外,Manifest文件中SeeResults的parentActivityName可简化为".MainActivity"(因同属一个包),但这不是导致崩溃的原因。
内容的提问来源于stack exchange,提问作者Rober
相关产品推荐
相关产品推荐

