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

解决Integer.parseInt抛出NumberFormatException(输入字符串为null)的问题

问题根源

你遇到的NumberFormatException是因为product.getQuantity()返回的不是null对象,而是字符串"null"——你的判断if (product.getQuantity() != null)只能过滤掉null对象,没法识别值为"null"的字符串,所以调用Integer.parseInt()时会直接报错。另外还要注意,空串、空白字符串(比如" ")这类非法格式也会导致转换失败,最好一并处理。

解决方案

方案1:直接增强判断逻辑

在转换前,先检查字符串是否为"null"、空串或空白,再执行转换,同时加入异常捕获处理其他非法格式:

private void updateTotalQuantity() {
    int quantity = 0;
    double price = 0.0;
    Double totalPrice = 0.0;
    List<ProductDetail> products = mProductsAdapter.getProducts();

    for (ProductDetail product : products) {
        String qtyStr = product.getQuantity();
        // 过滤null对象、"null"字符串、空/空白串,再尝试转换
        if (qtyStr != null && !qtyStr.trim().equalsIgnoreCase("null") && !qtyStr.trim().isEmpty()) {
            try {
                quantity += Integer.parseInt(qtyStr.trim());
            } catch (NumberFormatException e) {
                // 遇到"abc"这类非法格式时,打日志或直接忽略
                e.printStackTrace();
            }
        }

        String priceStr = product.getPrice();
        // 计算总价时同样增强判断逻辑
        if (priceStr != null && !priceStr.trim().equalsIgnoreCase("null") && !priceStr.trim().isEmpty()
                && qtyStr != null && !qtyStr.trim().equalsIgnoreCase("null") && !qtyStr.trim().isEmpty()) {
            try {
                price = Double.parseDouble(priceStr.trim());
                int qty = Integer.parseInt(qtyStr.trim());
                totalPrice += price * qty;
            } catch (NumberFormatException e) {
                e.printStackTrace();
            }
        }
    }
    totalQty.setText(String.valueOf(quantity));
    totalOrder.setText(String.valueOf(totalPrice));
}

方案2:封装安全转换工具方法(推荐)

把字符串转数字的逻辑抽成工具方法,代码更简洁,还能在其他地方复用:

// 安全转换字符串为int,非法情况返回0
private int safeParseInt(String str) {
    if (str == null || str.trim().equalsIgnoreCase("null") || str.trim().isEmpty()) {
        return 0;
    }
    try {
        return Integer.parseInt(str.trim());
    } catch (NumberFormatException e) {
        e.printStackTrace();
        return 0;
    }
}

// 安全转换字符串为double,非法情况返回0.0
private double safeParseDouble(String str) {
    if (str == null || str.trim().equalsIgnoreCase("null") || str.trim().isEmpty()) {
        return 0.0;
    }
    try {
        return Double.parseDouble(str.trim());
    } catch (NumberFormatException e) {
        e.printStackTrace();
        return 0.0;
    }
}

// 简化后的updateTotalQuantity方法
private void updateTotalQuantity() {
    int quantity = 0;
    Double totalPrice = 0.0;
    List<ProductDetail> products = mProductsAdapter.getProducts();

    for (ProductDetail product : products) {
        int qty = safeParseInt(product.getQuantity());
        quantity += qty;

        double price = safeParseDouble(product.getPrice());
        totalPrice += price * qty;
    }
    totalQty.setText(String.valueOf(quantity));
    totalOrder.setText(String.valueOf(totalPrice));
}

额外建议

如果是接口返回的"null"字符串,最好和后端开发沟通,让他们返回null对象或者合法的数字字符串,从源头避免这类格式问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:03:32