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

Android调用Color.parseColor报StringIndexOutOfBoundsException怎么解决

错误原因

崩溃的根因是Color.parseColor()方法接收到空字符串参数导致的:

  • 从错误日志可见异常在Color.java的charAt调用处抛出,说明传入的颜色字符串长度为0
  • 日志中标注的第81行是远程配置拉取成功回调的声明行,实际执行报错的是第115行的颜色解析逻辑
  • 当isToolBarImageEnabled为false时,代码会走到else分支,直接使用从Firebase远程配置获取的toolbarColor调用Color.parseColor(),如果该参数在远程配置后台未配置、拉取失败,拿到的就是空字符串,直接解析就会抛出该异常。

修复方案

1. 配置Firebase RemoteConfig本地默认值

在调用fetchAndActivate之前,先给所有用到的远程配置参数设置本地默认值,避免拉取失败或未配置时拿到空值:

// 在Activity onCreate或RemoteConfig初始化位置添加默认配置
Map<String, Object> defaults = new HashMap<>();
defaults.put("backgroundImage", ""); // 可替换为你的默认背景图地址
defaults.put("toolbarColor", "#FF000000"); // 替换为你需要的默认工具栏颜色,示例为黑色
defaults.put("toolbarImage", "");
defaults.put("toolBarImageEnabled", false);
mFirebaseRemoteConfig.setDefaultsAsync(defaults);

2. 代码层增加合法性校验兜底

在调用Color.parseColor之前先判断字符串是否合法,不合法就使用默认颜色:

} else {
    int finalToolbarColor;
    // 校验颜色字符串格式合法性
    if (toolbarColor != null && toolbarColor.startsWith("#") && (toolbarColor.length() == 7 || toolbarColor.length() == 9)) {
        try {
            finalToolbarColor = Color.parseColor(toolbarColor);
        } catch (IllegalArgumentException e) {
            // 解析异常时使用默认颜色
            finalToolbarColor = Color.BLACK;
        }
    } else {
        finalToolbarColor = Color.BLACK;
    }
    getSupportActionBar().setBackgroundDrawable(new ColorDrawable(finalToolbarColor));
}

3. 确认远程后台配置

登录Firebase控制台进入RemoteConfig页面,确认toolbarColor参数已正确配置,值为合法的十六进制颜色格式(例如#FFFFFF,必须带#前缀),配置完成后记得发布新版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:57:04