java - 解析颜色不再适用于十六进制值

标签 java android

这很奇怪,我以前用过这个功能。但它似乎已停止工作,我不知道为什么。

我使用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/

相关文章:

java - Eclipse 可以在不添加通配符的情况下自动完成导入语句吗?

java - Android Retrofit请求如何在主线程中获取Retrofit响应

android - 无法从本地文件夹添加 cordova 插件

java - 根据用户选项设置 BigDecimal RoundingMode 而不使用 if 语句?

android - 从 Android 的 .NET WebService 中保存字节

Android 两层重叠滚动布局类似 Airbnb 房间细节布局

java - MapStruct 根据目标类型映射正确的对象实例

java - Cobertura 不适用于 Java 7

java - 在 Android 5 最近屏幕中更改 Activity 的标题/标签

java - 安卓 REST - java.lang.VerifyError : MappingJacksonHttpMessageConverter