为什么我的代码给出NumberFormatException?

时间:2013-11-29 13:56:09

标签: java android

我有这样的代码:

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

请向我建议解决此问题。

7 个答案:

答案 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)返回数字格式异常