Android中int转字符串失败引发资源未找到异常的解决方法
问题
在实现单位换算功能时,获取用户输入并计算后触发异常:android.content.res.Resources$NotFoundException: String resource ID #0x0。根源是未正确将数值转换为字符串,导致系统把传入的整数当作资源ID去查找,最终找不到对应资源抛出异常。
相关代码如下:
public void calculateAndDisplay() { editNumString = editNumText.getText().toString(); float num; //this num is causing the issue if (editNumString.equals("")){ num = 0; } else { num = Float.parseFloat(String.valueOf(editNumString)); } float unitResult = 0; if (unitSelect.getSelectedItem().toString().trim().equals("Miles to Kilometers")) { unitResult = (float) (num * 1.6093); } else if (unitSelect.getSelectedItem().toString().trim().equals("Kilometers to Miles")) { unitResult = (float) (num * 0.6214); } else if (unitSelect.getSelectedItem().toString().trim().equals("Inches to Centimeters")) { unitResult = (float) (num * 2.54); } else if (unitSelect.getSelectedItem().toString().trim().equals("Centimeters to Inches")) { unitResult = (float) (num * 0.3937); } unitResultView.setText((int) unitResult); }
已尝试初始化num为0、使用setText方法、String.valueOf转换,但实现有误,寻求修复方法。
修复方案
核心问题解析
TextView.setText(int)方法的设计是接收字符串资源ID,而非直接显示数字。当你传入(int) unitResult(比如0)时,系统会去资源文件中查找ID为0x0的字符串,找不到就抛出Resources$NotFoundException。
具体修复步骤
正确转换数值为字符串
将最后一行代码修改为直接把数值转为字符串后传入:unitResultView.setText(String.valueOf(unitResult));如果需要控制小数位数(例如保留2位),可以用格式化输出:
unitResultView.setText(String.format("%.2f", unitResult));优化输入处理逻辑(可选)
- 原代码中
Float.parseFloat(String.valueOf(editNumString))冗余,editNumString已是字符串,直接解析即可:num = Float.parseFloat(editNumString); - 增加输入合法性校验,避免非数字输入导致的
NumberFormatException:try { num = Float.parseFloat(editNumString); } catch (NumberFormatException e) { num = 0; unitResultView.setText("请输入有效数字"); return; }
- 原代码中
优化单位判断逻辑(可选)
重复调用unitSelect.getSelectedItem().toString().trim()会浪费性能,先缓存选中项:String selectedUnit = unitSelect.getSelectedItem().toString().trim(); if (selectedUnit.equals("Miles to Kilometers")) { unitResult = num * 1.6093f; } else if (selectedUnit.equals("Kilometers to Miles")) { unitResult = num * 0.6214f; } else if (selectedUnit.equals("Inches to Centimeters")) { unitResult = num * 2.54f; } else if (selectedUnit.equals("Centimeters to Inches")) { unitResult = num * 0.3937f; }
内容的提问来源于stack exchange,提问作者MysticSticker
相关产品推荐
相关产品推荐

