Android应用本地化RecyclerView报错NumberFormatException求助
解决RecyclerView本地化时的NumberFormatException问题
你这里碰到的是一个典型的类型混淆错误,咱们来一步步拆解问题:
问题根源
从报错信息java.lang.NumberFormatException: Invalid int: "खेती"就能直接定位问题——你试图把本地化后的文本字符串(这里是印地语的“耕种”)强行转换成整数,但这个字符串本身就是纯文本,根本不是数字格式,自然会抛出异常。
核心问题出在这一行代码:
object01.setDepname(Integer.parseInt(resources.getString(R.string.cultivation)));
resources.getString(R.string.cultivation)返回的是你在多语言strings.xml里定义的对应语言的文本(比如印地语的"खेती"),但你却用Integer.parseInt()强制转成整数,这完全不符合逻辑。
而按钮、TextView能正常工作,是因为它们的setText()方法本身就接收字符串参数,直接传本地化后的文本就没问题。
解决方案
根据setDepname()方法的实际需求,分两种情况处理:
情况1:setDepname()本来就该接收字符串(最可能的场景)
如果这个方法是用来设置RecyclerView项里的部门名称/作物名称这类显示文本,那直接去掉Integer.parseInt(),把本地化后的字符串直接传进去即可:
object01.setDepname(resources.getString(R.string.cultivation));
情况2:setDepname()确实需要接收整数
如果这个方法需要的是一个数值ID(比如作物的编号),那你应该:
- 把这个ID值定义在
integers.xml资源文件里,而不是strings.xml - 用
getResources().getInteger()来获取整数资源,而非getString()
举个实现例子:
- 在
res/values/integers.xml中定义:
<integer name="cultivation_id">1</integer>
- 代码中获取并传入:
object01.setDepname(resources.getInteger(R.integer.cultivation_id));
这样不管切换什么语言,获取的都是合法整数,不会出现格式转换错误。
额外提醒
做本地化时一定要明确资源的用途:字符串资源存显示文本,整数资源存数值ID,不要把文本和数值混在一起使用,否则很容易出现这类低级错误。
内容的提问来源于stack exchange,提问作者mohamed rimshadpcs
相关产品推荐
相关产品推荐

