NumberFormatException-无效的Int

问题描述:

我想添加一大堆可绘制的引用列表,我需要更改可绘制引用中的数字,因为每个引用不同的项目。我曾尝试如下:NumberFormatException-无效的Int

for(int x=69;x<222;x++){ 
      urls.add(x,Integer.parseInt("R.drawable.item"+(x+1)+"_lock"); 
     } 

和运行时它产生NumberFormatException错误:java.lang.NumberFormatException: Invalid int: "R.drawable.item70_lock"

这是正确的方式去了解什么,我试图做的还是有不同的方式?

+0

Integer.parseInt()尝试获取一个Integer值,该值用字符串写入。因此,Integer.parseInt(“123”)将返回123.通常,R.drawable.item123不是唯一的可绘制Integer ID,Integer.parseInt(“R.drawable.item123”)将返回该异常,因为“R.drawable.item123”不是一个数字。 – MojioMS

+2

为什么你认为*文本*'“R.drawable.item70_lock”'是一个数字? – Andreas

获取资源动态IDS:

for(int x=69;x<222;x++){ 
    int id = getResources().getIdentifier("item" + (x+1) + "_lock", "drawable", getPackageName()); 
    if(id != 0) 
     urls.add(x, id); 
} 
+0

这是一种反模式,资源不应该以这种方式访问​​。 – Kelevandos

+0

链接上的反模式请 –

+0

喜欢文章?我没有,我是从经验谈起。这个功能一开始就可以正常工作,但会引入一些风格或Gradle生成逻辑,并且会变得不稳定。 Android中的资源是静态的,应该使用来自'R'类的静态生成的标识符来访问。 – Kelevandos

这不是

首先,资源指针实际上是如何的Android资源工作:)是一个常数INT,不是StringR.drawable.item_1_lock是自动生成的类R中的字段。

二,Integer.parseInt()用于将数字字符串转换为实际数字基本类型。因此,如果您使用String参数“1”调用它,则会得到值为1的整数。

这里的问题是您传递的String不是数字形式。它不能变成数字,所以抛出异常。

最后,您不能在运行时生成资源指针。它们是自动生成的并且易于更改,因此不应像上面那样生成它们。创建一个int[],将可能的资源放在它中,并使用迭代的x获取它:-)

+0

那么引用'R.drawable.XXX'只是指文件名XXX是否是一种误解? – ez4nick

+0

R.drawable。XXX是名为'R'的类中的静态字段,不是字符串标识符:-) – Kelevandos

+0

它指的是名为XXX的资源,但无法按照您尝试的方式访问它。没有一个字符串,你需要使用在R类生成的标识符(这是自动生成的整数) – Kelevandos