Android千米转厘米App点击转换按钮崩溃 TextView设置数值异常
问题排查结果
直接崩溃原因
你在执行tv.setText(valor)时传入的valor是数值类型,Android的TextView.setText()存在方法重载:如果传入int类型参数,系统会默认将其识别为字符串资源ID,尝试在项目的res/values/strings.xml中查找对应ID的字符串资源,你的项目中不存在对应ID的资源,因此抛出Log中显示的Resources$NotFoundException异常,直接导致应用崩溃。
潜在风险点
你的EditText控件设置了android:inputType="numberDecimal"属性,允许用户输入小数,而你当前使用Integer.parseInt()解析输入内容,一旦用户输入带小数的数值,会直接抛出NumberFormatException异常,同样会导致应用崩溃。另外如果用户未输入内容直接点击按钮,取到的输入字符串为空,也会触发解析异常。
修复方案
修改calcular方法,先做输入合法性校验,将数值转为字符串后再传入setText方法,同时改用浮点数解析适配小数输入,参考代码如下:
public void calcular(View v){ EditText text = findViewById(R.id.pt_entrada); String inputContent = text.getText().toString().trim(); // 输入为空校验 if (inputContent.isEmpty()) { // 可自行替换为你的提示逻辑 Toast.makeText(this, "请先输入千米数值", Toast.LENGTH_SHORT).show(); return; } // 改用Double解析适配小数输入 double input = Double.parseDouble(inputContent); // 1千米=100000厘米,可根据你的实际变量名调整 double cm = 100000; double valor = input * cm; Log.d("info", String.valueOf(valor)); TextView tv = findViewById(R.id.tv_pantalla); // 将数值转为字符串后再设置到TextView tv.setText(String.valueOf(valor)); // 如果需要固定小数位数+单位可以用格式化写法: // tv.setText(String.format("换算结果:%.2f 厘米", valor)); }
内容的提问来源于stack exchange,提问作者KevinDoUrden
相关产品推荐
相关产品推荐

