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

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(比如作物的编号),那你应该:

  1. 把这个ID值定义在integers.xml资源文件里,而不是strings.xml
  2. 用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:10:05