You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中为CardView设置颜色报错:Unknown color异常排查

解决Color.parseColor抛出IllegalArgumentException的问题

这个错误通常是因为你从JSON拿到的十六进制颜色字符串不符合Color.parseColor()要求的格式,咱们一步步排查和解决:

常见原因&对应解决方案

1. 颜色字符串缺少#前缀

Color.parseColor()只认带#开头的十六进制格式(比如#RRGGBB或#AARRGGBB),如果你的JSON返回的是纯十六进制值(比如FF0000而不是#FF0000),就会触发这个错误。

解决代码:

String playerteamcolorstr = playerteamcolorlist.get(i);
// 先去除前后空白,再检查是否有#前缀
playerteamcolorstr = playerteamcolorstr.trim();
if (!playerteamcolorstr.startsWith("#")) {
    playerteamcolorstr = "#" + playerteamcolorstr;
}
// 再设置背景色
viewHolder.soldedlinearlayout.setCardBackgroundColor(Color.parseColor(playerteamcolorstr));

2. 字符串包含多余空白/特殊字符

有时候JSON返回的字符串可能带前后空格、换行符或者其他不可见字符,导致解析失败。用trim()可以快速去除这些干扰。

3. 颜色值不是合法的十六进制

如果字符串里包含0-9、A-F/a-f之外的字符(比如小写字母之外的符号、无关字符等),parseColor()也会报错。这时候可以先打Log确认实际拿到的字符串:

Log.d("ColorCheck", "Raw color string: '" + playerteamcolorstr + "'");

通过Log可以直观看到字符串里的异常内容,再针对性处理(比如过滤非法字符)。

4. 兜底处理避免崩溃

即使做了前面的检查,还是可能遇到异常格式的颜色值,用try-catch包裹代码可以避免APP崩溃,同时设置一个默认颜色:

try {
    String colorStr = playerteamcolorlist.get(i).trim();
    if (!colorStr.startsWith("#")) {
        colorStr = "#" + colorStr;
    }
    viewHolder.soldedlinearlayout.setCardBackgroundColor(Color.parseColor(colorStr));
} catch (IllegalArgumentException e) {
    // 出现错误时设置默认灰色
    viewHolder.soldedlinearlayout.setCardBackgroundColor(Color.GRAY);
    Log.e("ColorError", "Invalid color: " + playerteamcolorlist.get(i), e);
}

内容的提问来源于stack exchange,提问作者Pooja Pachchigar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:17:16