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

Xamarin.Forms未处理异常Java.lang.NumberFormatException求助

解决Xamarin中Java.lang.NumberformatException: Invalid int: 异常

嘿,作为Xamarin新手碰到这种突然炸出来的异常确实闹心,我来帮你拆解一下这个问题!这个Java.lang.NumberformatException: Invalid int:异常本质是程序尝试把空字符串或者非数字内容转换成int类型时失败了——虽然你是在搞SQLite开发,但这个错误其实是Android的类型转换问题,大概率是今天你新增/修改的代码里,有地方把空值塞给了需要int参数的API、控件,或是处理SQLite返回值时没做空值判断。

下面给你几个具体的排查方向:

1. 先抓准异常的具体触发点

首先得找到到底是哪行代码出的问题:

  • 打开Visual Studio的输出窗口或者Android的日志面板,找完整的异常堆栈信息,里面会明确指出是MainActivity里的哪一行,或是SQLite操作的哪一步触发了错误。
  • 切换到调试模式,给今天改的代码打上断点,逐步运行,看执行到哪一步突然抛出异常。

2. 排查SQLite相关的操作

既然你在做SQLite开发,先检查这部分:

  • 是不是今天改了查询语句,某个字段返回了空值,你直接强转成int了?比如这种写法就很容易踩坑:
    // 危险:如果reader["Age"]是空的,强转int直接炸
    int age = (int)reader["Age"];
    
    改成安全的写法,先判断空值:
    int age = reader["Age"] != DBNull.Value ? Convert.ToInt32(reader["Age"]) : 0; // 给个默认值或者按需处理
    
  • 检查给SQLite命令传参的时候,是不是把空字符串传给了int类型的参数?比如:
    // 错误:空字符串转int肯定失败
    cmd.Parameters.AddWithValue("@UserId", string.Empty);
    
    确保参数是有效的int值,如果允许空,就用可空类型int?来处理。

3. 检查MainActivity里的控件交互

有时候这个锅不一定是SQLite的,可能是你今天改了控件相关的代码:

  • 是不是从EditText取了文本就直接转int,但用户(或者你测试时)没输入内容?比如:
    // 坑:editText.Text为空时,int.Parse直接报错
    int quantity = int.Parse(quantityEditText.Text);
    
    换成安全的int.TryParse:
    int quantity;
    if (!int.TryParse(quantityEditText.Text, out quantity))
    {
        // 提示用户输入有效数字
        Toast.MakeText(this, "请输入有效的数字哦", ToastLength.Short).Show();
        return;
    }
    // 这里再正常用quantity
    
  • 还有一种少见的情况:给控件属性传值时,把空字符串传给了需要int资源ID的参数(比如TextView.SetText()),也会触发这个异常,记得排查这类代码。

4. 对比昨天的代码差异

既然昨天项目还好好的,今天才出问题,直接对比今天修改的代码(用Git或者IDE的本地历史功能),重点看新增/改动的涉及int转换、SQLite查询、控件文本处理的部分,大概率问题就藏在这里。

如果能提供更完整的异常堆栈,或者你今天修改的具体代码片段,能更快定位到问题哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:24:37