Android中的URI匹配器问题

时间:2011-01-17 23:51:39

标签: android uri provider

我有一个如此定义的权限字符串:

public final static String AUTHORITY = "dsndata.sds2mobile.jobprovider";

随后是UriMatcher的版本:

uriMatcher.addURI(JobMetaData.AUTHORITY, "/JobNames/*",
                      JOBNAME_SINGLE_URI);

传递给交换机的uri是:

content://dsndata.sds2mobile.jobprovider/JobNames/test

这会通过切换并触及默认值(抛出IllegalArgumentException)。

我错过了什么吗?我已经搜索过,找不到任何会导致不匹配的内容。

2 个答案:

答案 0 :(得分:6)

IllegalArgumentException也遇到了同样的问题。即使那些调试Uri的人都是一样的! [逼我疯了]。如果你已经定义了* / match,它似乎匹配并阻止其他人匹配。 订购重要!!

我重新排序,'external_warning_id'现在运行正常。

//putting it first as /* seems to get matched first
    URL_MATCHER.addURI(AUTHORITY, TABLE_NAME.toLowerCase() + "/external_warning_id" + "/*",
            EXTERNAL_WARNING_ID);

// was the first entry in static block
URL_MATCHER.addURI(AUTHORITY, TABLE_NAME.toLowerCase() + "/*", WARNING__ID);

答案 1 :(得分:4)

尝试删除前导斜杠:

uriMatcher.addURI(JobMetaData.AUTHORITY, "JobNames/*",
                  JOBNAME_SINGLE_URI);

而不是

uriMatcher.addURI(JobMetaData.AUTHORITY, "/JobNames/*",
                  JOBNAME_SINGLE_URI);

(更新)

使用提供的代码,我通过将该行移至顶部来使其工作。定义的顺序很重要,似乎你的其他一些匹配器有些冲突。无论如何,把它移到顶层工作。