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值,如果允许空,就用可空类型// 错误:空字符串转int肯定失败 cmd.Parameters.AddWithValue("@UserId", string.Empty);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
相关产品推荐
相关产品推荐

