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

Android 跨Activity传递EditText数值转Int后运算崩溃或结果为0问题

问题诱因
  • 传参接收方法错误:第二个Activity中调用的getString()是Context类提供的方法,作用是读取res/strings.xml下的本地字符串资源,无法读取前一个Activity通过putExtra传递的参数,导致拿到的字符串为null或者无效值,调用Integer.parseInt时要么崩溃要么转换结果为0。
  • 输入内容与转换类型不匹配:EditText的inputType设置为decimal number,允许用户输入带小数点的数值,此时获取到的字符串包含.符号,Integer.parseInt无法解析带小数点的字符串,会抛出NumberFormatException直接导致应用崩溃。
  • 空输入未做校验:如果用户未输入内容就跳转页面,拿到的字符串是空串,Integer.parseInt解析空串也会抛出异常导致崩溃。
解决方案
  • 修正传参接收逻辑:第二个Activity中先通过getIntent()获取意图对象,再调用getStringExtra()读取传递的参数。
  • 匹配输入类型与转换逻辑:
    • 如果业务只允许输入整数:直接将EditText的inputType修改为number,从输入源头限制用户只能输入整数,避免出现小数点。
    • 如果业务允许输入小数:将接收后的数值转换为Float或Double类型存储,不要强制转换为int避免精度损失或者解析异常。
  • 增加异常校验逻辑:封装安全的数值转换方法,对空值、非法格式输入做捕获处理,设置兜底默认值避免崩溃。

修正后参考代码如下:

// 第二个Activity中接收参数逻辑
Intent inputIntent = getIntent();
String correctNum = inputIntent.getStringExtra("c_a");
String wrongNum = inputIntent.getStringExtra("w_a");
String blankNum = inputIntent.getStringExtra("b_a");
String allNum = inputIntent.getStringExtra("a_a");

float res = 0;
int cN = safeParseInt(correctNum, 0);
int wN = safeParseInt(wrongNum, 0);
int bN = safeParseInt(blankNum, 0);
int aN = safeParseInt(allNum, 0);

// 安全转换int的工具方法,输入非法时返回默认值
private int safeParseInt(String str, int defaultValue) {
    if (str == null || str.trim().isEmpty()) {
        return defaultValue;
    }
    try {
        // 兼容带小数的输入,先转double再取整
        double num = Double.parseDouble(str.trim());
        return (int) num;
        // 若仅允许整数,可替换为 return Integer.parseInt(str.trim());
    } catch (NumberFormatException e) {
        return defaultValue;
    }
}

内容的提问来源于stack exchange,提问作者Farzad Moradkhani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:18:01