public static final UriMatcher uriMatcher;
static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(Book.AUTHORITY, "item", Book.ITEM);
uriMatcher.addURI(Book.AUTHORITY, "item/#", Book.ITEM_ID);
}
这里UriMatcher类型的静态字段是用来匹配传入到ContentProvider中的Uri的类。其构造方法传入的匹配码是使用match()方法匹配根路径时返回的值,这个匹配码可以为一个大于零的数表示匹配根路径或传入-1,即常量UriMatcher.NO_MATCH表示不匹配根路径。addURI()方法是用来增加其他URI匹配路径的,第一个参数传入标识ContentProvider的AUTHORITY字符串。第二个参数传入需要匹配的路径,[color=blue]这里的#代表匹配任意数字,另外还可以用*来匹配任意文本。[/color]第三个参数必须传入一个大于零的匹配码,用于match()方法对相匹配的URI返回相对应的匹配码。
例子:
@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
System.out.println(" BookProvider getType...");
int code = uriMatcher.match(uri);
switch (code) {
case Book.ITEM:
System.out.println(" BookProvider getType..." +Book.CONTENT_TYPE);
return Book.CONTENT_TYPE;
case Book.ITEM_ID:
System.out.println(" BookProvider getType..." +Book.CONTENT_ITEM_TYPE);
return Book.CONTENT_ITEM_TYPE;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
}