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
相关产品推荐
相关产品推荐

