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

Android邮件应用UriMatcher通配符匹配失败引发崩溃问题咨询

Android UriMatcher 匹配失败问题原因分析

核心原因

UriMatcher 内置的通配符规则中,* 仅能匹配 URI 路径中两个 / 之间的单个路径段,无法跨 / 匹配多段连续路径,你的匹配规则与实际 URI 的路径段数量不匹配,导致校验失败抛出异常。

细节拆解

  • 你定义的匹配规则 uiattachmentbycid/#/* 仅支持3段路径结构:
    1. 固定前缀段 uiattachmentbycid
    2. 纯数字段(由通配符 # 匹配)
    3. 任意单个路径段(由通配符 * 匹配)
  • 实际触发异常的 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:15:07