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

传入0调用ContextCompat.getColor触发Resource NotFound Exception求助

问题根因

ContextCompat.getColor() 方法要求传入的第二个参数必须是合法的Android颜色资源ID,也就是类似R.color.xxx这种由编译工具自动生成的非0整数ID。当你传入0时,系统会尝试查找ID为0x0的资源,这类资源不存在,就会直接抛出Resources$NotFoundException异常,触发崩溃。

可行解决方案
  • 方案1:直接使用系统颜色常量(无需走资源加载,性能最优)
    如果你需要的兜底值是固定颜色,可直接调用android.graphics.Color类的内置常量传入setTextColor,不需要嵌套ContextCompat.getColor:
// 示例:兜底为黑色
findViewById<TextView>(R.id.text_view).setTextColor(Color.BLACK)
// 示例:兜底为透明
findViewById<TextView>(R.id.text_view).setTextColor(Color.TRANSPARENT)
  • 方案2:提前判断资源ID有效性,走兜底逻辑
    保留原有switch分支逻辑的前提下,对资源ID做非0判断,0值时返回自定义兜底颜色:
val targetColorRes = when(你的判断条件) {
    // 原有分支返回对应R.color.xxx资源ID
    else -> 0
}
val finalTextColor = if (targetColorRes == 0) {
    // 自定义兜底颜色,也可以填Color.parseColor("#xxxxxx")自定义色值
    Color.BLACK
} else {
    ContextCompat.getColor(applicationContext, targetColorRes)
}
findViewById<TextView>(R.id.text_view).setTextColor(finalTextColor)
  • 方案3:异常捕获兜底(不推荐,仅兼容不可控的资源ID传入场景)
    如果无法提前判断资源ID有效性,可以主动捕获异常避免崩溃:
val finalTextColor = try {
    ContextCompat.getColor(applicationContext, targetColorRes)
} catch (e: Resources.NotFoundException) {
    Color.BLACK // 异常时返回兜底色
}
findViewById<TextView>(R.id.text_view).setTextColor(finalTextColor)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:54:03