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

Android应用使用负数时发生崩溃,if(expiry_num>0)行报错如何解决?

问题原因分析
  • 你观测到崩溃发生在if(expiry_num>0)行大概率是行号映射偏差,实际崩溃根源出在Integer.parseInt(expiry)步骤:
    • 服务端返回的Minutes字段可能为空、null、包含非数字字符(比如小数点、空格、特殊符号)
    • 服务端返回的数值超出int类型的取值范围(-2147483648 ~ 2147483647),尤其是负数值绝对值过大时会直接抛出NumberFormatException
    • 没有做异常捕获,解析失败时应用直接崩溃
修复方案

增加空值判断和异常捕获逻辑,兼容服务端返回的异常格式,修改后代码如下:

// 先判空避免空指针异常
Object minuteObj = StatusInfo.get("Minutes");
if (minuteObj == null) {
    // 空值可根据业务需求走兜底逻辑,这里默认不执行后续流程
    return;
}
// 去除前后空格避免空格导致解析失败
String expiry = minuteObj.toString().trim();
int expiry_num = 0;
try {
    expiry_num = Integer.parseInt(expiry);
} catch (NumberFormatException e) {
    // 超出int范围时尝试用long解析判断正负
    try {
        long expiryLong = Long.parseLong(expiry);
        expiry_num = expiryLong > 0 ? 1 : -1;
    } catch (NumberFormatException ex) {
        // 完全为非合法数字时,默认判定为不满足大于0的条件
        expiry_num = 0;
    }
}
if (expiry_num > 0) {
    DetailsHandling();
}

补充说明

如果服务端可能返回带小数的数值(比如2.5),可以先转成BigDecimal再取整判断,避免解析失败;也可以根据业务需求调整解析失败后的默认逻辑,比如弹窗提示服务端异常、走其他兜底流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 21:12:03