我有这样的代码:
int [] arrayOfImages = new int[namesOfSubjectsColorCode.size()];
int y = 0;
for (int x = 0 ; x<namesOfSubjectsColorCode.size();x++) {
nameOfColorCode = namesOfSubjectsColorCode.get(x);
String str = "com" + "." + "nyurals" + "." + "R" + "." + "drawable" + "." + nameOfColorCode;
arrayOfImages[y] = Integer.parseInt(str);
// Integer.parseInt(str);
y++;
}
在这里,我创建了整数数组。然后,我创建了字符串,并使用Integer.parseInt()
我想将它转换为int,这样,我的整数数组应该动态生成。它正在给NumberFormatException
。
请向我建议解决此问题。
答案 0 :(得分:1)
Integer.parseInt()的参数无效,你不能传递像“com.nyurals ..”等字符串
来自文档:
public static int parseInt(String s)
throws NumberFormatException
将字符串参数解析为带符号的十进制整数。字符串中的字符必须都是十进制数字,除了第一个字符可以是ASCII减号' - '('\ u002D')表示负值或ASCII加号'+'('\ u002B')表示正值。返回结果整数值,就像参数和基数10作为parseInt(java.lang.String,int)方法的参数一样。
这正是你得到的:NumberFormatException。
修改强>
你可能想做这样的事情:
nameOfColorCode = namesOfSubjectsColorCode.get(x);
String str = "" + nameOfColorCode;
int resourceId = this.getResources().getIdentifier(str, "drawable", this.getPackageName());
arrayOfImages[y] = resourceId;
y++;
答案 1 :(得分:1)
此String
无法合理地转换为int
。
String str = "com" + "." + "nyurals" + "." + "R" + "." + "drawable" + "." + nameOfColorCode;
预期会有这样的事情:
String str = "1";
答案 2 :(得分:1)
很明显它会给你NumberFormatException。看看你的代码:
您的str
变量包含String
,无法解析为整数值。
答案 3 :(得分:0)
Integer.parseInt()
期望得到某种整数,而不是格式为com.nyurals.R.drawable.<<nameOfColorCode>>
的字符串。
通常,在Android中,您可以使用以下内容直接访问变量:
R.drawable.SomeName
而不是尝试解码(或者,在您的情况下,直接使用)字符串以获取值。
例如,以下代码根据ID获取表面视图:
SurfaceView sv = (SurfaceView)findViewById(R.id.PfrRightAntiView);
如果您 需要根据仅在运行时知道的字符串动态提取资源,请查看Resources.getIdentifier()
,其中一个示例可以找到here。< / p>
根据this article,该方法可能不是最快的。使用该链接中显示的反射方法可能更好。
答案 4 :(得分:0)
如果你想获得资源的int(id)而不是你应该使用
Resources res = activity.getResources();
res.getIdentifier("name","resourceType",activty.getPackageName());
使用实际名称更改名称,使用实际资源类型(可绘制,颜色等)更改 resourceType ; 正如其他人所写,你的字符串中没有int,它只是一个int而不是resoruce的引用
答案 5 :(得分:0)
您可以通过http://docs.oracle.com/javase/tutorial/reflect/访问您尝试引用的常量,但实际上您并不想这样做。
你可以更好地将int放在某种形式的地图中,然后根据不断变化的信息选择某种子集
答案 6 :(得分:0)
可能你的str返回null,因此Integer.parseInt(null)返回数字格式异常