Android Studio抛物射高计算APP空输入崩溃问题求助
解决EditText为空时计算按钮导致应用崩溃的问题
首先澄清:你提到的FloatingActionButton和这个问题无关,崩溃的核心原因是当EditText为空时,调用Double.parseDouble()解析空字符串会抛出NumberFormatException,直接导致应用崩溃。下面是具体的修复方案:
修复步骤
我们需要在计算前添加输入校验,并捕获可能的异常,确保应用不会崩溃:
- 获取输入文本时先去除首尾空格,判断是否为空
- 若为空,用Toast提示用户补全输入
- 用try-catch包裹数字解析和计算逻辑,处理非数字格式的输入情况
修改后的完整Java代码
public class MainActivity extends AppCompatActivity { private EditText velocityEditText; private EditText angleEditText; private Button calculateButton; private TextView resultTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); velocityEditText = findViewById(R.id.velocity_edit_text); angleEditText = findViewById(R.id.angle_edit_text); calculateButton = findViewById(R.id.calculateButton); resultTextView = findViewById(R.id.result_text_view); calculateButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 获取输入并去除首尾空格 String velocityStr = velocityEditText.getText().toString().trim(); String angleStr = angleEditText.getText().toString().trim(); // 校验输入是否为空 if (velocityStr.isEmpty() || angleStr.isEmpty()) { Toast.makeText(MainActivity.this, "请填写完整的速度和角度值", Toast.LENGTH_SHORT).show(); return; } try { // 解析输入并计算 double velocity = Double.parseDouble(velocityStr); double angle = Double.parseDouble(angleStr); double radians = Math.toRadians(angle); // 变量名优化:原range改为maxHeight,更贴合最大高度的语义 double maxHeight = ((Math.pow(velocity, 2)) * (Math.pow(Math.sin(radians), 2))) / (2 * 9.81); resultTextView.setText("Altura Máxima: " + String.format("%.2f", maxHeight) + " m"); } catch (NumberFormatException e) { // 处理非数字格式的输入 Toast.makeText(MainActivity.this, "请输入有效的数字", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } } }); } }
关键说明
- 输入校验:用
trim()去除用户可能输入的空格,避免" "这种空白字符串被误判为有效输入 - Toast提示:给用户明确的反馈,知道需要补全输入或纠正格式
- 异常捕获:即使用户输入了非数字内容(比如字母),也能捕获异常,避免应用崩溃
- 变量名优化:把
range改为maxHeight,更符合计算的是最大高度的语义
内容的提问来源于stack exchange,提问作者i53cde
相关产品推荐
相关产品推荐

