当您编写ContentProvider或其他需要响应许多不同URI的类时,UriMatcher是一个很方便的类。在您的示例中,用户可以使用例如以下URI查询您的提供程序:
myprovider://cte
或者
myprovider://cte/somestring
构建UriMatcher时,您需要为每个URI拥有单独的代码(不只是像示例中的“uriCode”那样)。我通常将UriMatcher实例设置为静态,并在静态构造函数中添加URIs:
private static final int CTE_ALL = 1;
private static final int CTE_FIND = 2;
private static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
static {
uriMatcher.addURI(PROVIDER_NAME, "cte", CTE_ALL);
uriMatcher.addURI(PROVIDER_NAME, "cte/*", CTE_FIND);
}
然后在您的ContentProvider中,您可以在查询方法中执行以下操作:
Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
int res = uriMatcher.match(uri);
switch (res) {
case CTE_ALL:
break;
case CTE_FIND:
break;
}
return results;
}