Android邮件应用UriMatcher通配符匹配失败引发崩溃问题咨询
Android UriMatcher 匹配失败问题原因分析
核心原因
UriMatcher 内置的通配符规则中,* 仅能匹配 URI 路径中两个 / 之间的单个路径段,无法跨 / 匹配多段连续路径,你的匹配规则与实际 URI 的路径段数量不匹配,导致校验失败抛出异常。
细节拆解
- 你定义的匹配规则
uiattachmentbycid/#/*仅支持3段路径结构:- 固定前缀段
uiattachmentbycid - 纯数字段(由通配符
#匹配) - 任意单个路径段(由通配符
*匹配)
- 固定前缀段
- 实际触发异常的 URI 路径共5个段:
uiattachmentbycid→4127→assets→img→filiale-icon@2x.png
数字段之后存在3个路径段,无法被单个*匹配,因此match()方法返回初始化配置的NO_MATCH(值为-1),最终触发异常。
修复方案参考
如果业务需要支持数字段后接任意多层路径,可按可能的路径深度逐级添加匹配规则:
UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH); // 覆盖不同层级的路径规则 sURIMatcher.addURI(EmailContent.AUTHORITY, "uiattachmentbycid/#/*", UI_ATTACHMENT_BY_CID); sURIMatcher.addURI(EmailContent.AUTHORITY, "uiattachmentbycid/#/*/*", UI_ATTACHMENT_BY_CID); sURIMatcher.addURI(EmailContent.AUTHORITY, "uiattachmentbycid/#/*/*/*", UI_ATTACHMENT_BY_CID); // 可根据业务场景继续补充更深层级的规则
如果路径层级无上限,也可将数字段后的路径整体做 URL 编码后合并为单个路径段,适配原有单*的匹配规则。
内容的提问来源于stack exchange,提问作者Flamefire
相关产品推荐
相关产品推荐

