这很奇怪,我以前用过这个功能。但它似乎已停止工作,我不知道为什么。
我使用Color.parseColor
来设置项目的背景颜色。
这是执行此操作的代码:
imgItemImage.setBackgroundColor(Color.parseColor(cartItem.get("picture")));
我收到此异常:
java.lang.NumberFormatException: For input string: "#837A67"
at java.lang.Long.parseLong(Long.java:579)
at android.graphics.Color.parseColor(Color.java:1386)
这似乎是正确的十六进制颜色,因此我不确定为什么它会导致此异常。
有人知道吗?
最佳答案
正如您从Exception
中看到的,问题出在从Color.parseColor()
内部调用Long.parseLong()
时>.
此异常
是由于Long.parseLong()的输入错误造成的,这是#
的额外字符,通常应该是这样在内部调用 Long.parseLong()
之前由 Color.parseColor()
删除。
您的代码抛出的异常
如下所示:
String str = "#837A67";
System.out.println(Long.parseLong(str, 16));
其中 16
是十六进制的 RADIX。
但是试试这个:
String str = "837A67";
System.out.println(Long.parseLong(str, 16));
您将得到预期的结果。
这表明通过 parseColor
传递的 String
不正确,因为 #
在 Color.parseColor 期间没有被删除()
很可能是因为不同字符被删除了。
仔细检查您传递给 Color.parseColor()
的值,并确保 #
之前没有任何字符。
关于java - 解析颜色不再适用于十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58032535/