这很奇怪,我以前使用过此功能。但是它似乎已停止工作,我不确定为什么。
我使用Color.parseColor
设置项目的背景色。
这是这样做的代码:
imgItemImage.setBackgroundColor(Color.parseColor(cartItem.get("picture")));
我收到此异常:
java.lang.NumberFormatException:对于输入字符串:“#837A67”
在java.lang.Long.parseLong(Long.java:579)
在android.graphics.Color.parseColor(Color.java:1386)
那似乎是正确的十六进制颜色,所以我不确定为什么会导致这种异常。
有谁有想法吗?
最佳答案
从Exception
可以看到,问题是从Long.parseLong()
内部调用Color.parseColor()
时。
此Exception
是由于将错误的输入给Long.parseLong()造成的,这是#
的附加字符,通常应在内部调用Color.parseColor()
之前由Long.parseLong()
删除该字符。
您的代码抛出的Exception
可以在下面进行演示:
String str = "#837A67";
System.out.println(Long.parseLong(str, 16));
其中,
16
是十六进制的RADIX。但是尝试一下:
String str = "837A67";
System.out.println(Long.parseLong(str, 16));
这样您将获得预期的结果。
这表明通过
String
传递的parseColor
是不正确的,因为#
在Color.parseColor()
期间没有被删除,这很可能是因为另一个字符被删除了。仔细检查您要传递给
Color.parseColor()
的值,并确保#
之前没有任何字符。