You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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。

具体修复步骤

  1. 正确转换数值为字符串
    将最后一行代码修改为直接把数值转为字符串后传入:

    unitResultView.setText(String.valueOf(unitResult));
    

    如果需要控制小数位数(例如保留2位),可以用格式化输出:

    unitResultView.setText(String.format("%.2f", unitResult));
    
  2. 优化输入处理逻辑(可选)

    • 原代码中Float.parseFloat(String.valueOf(editNumString))冗余,editNumString已是字符串,直接解析即可:
      num = Float.parseFloat(editNumString);
      
    • 增加输入合法性校验,避免非数字输入导致的NumberFormatException:
      try {
          num = Float.parseFloat(editNumString);
      } catch (NumberFormatException e) {
          num = 0;
          unitResultView.setText("请输入有效数字");
          return;
      }
      
  3. 优化单位判断逻辑(可选)
    重复调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 06:59:58