这很奇怪,我以前使用过此功能。但是它似乎已停止工作,我不确定为什么。

我使用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()的值,并确保#之前没有任何字符。

10-06 12:51