ContentProvider是Android四大组件之一,网上也有很多关于它的文章,基本用法均可以查到,但关于UriMatcher在其中的做用,文章中都有例子,但我以为尚未说清楚。java
先说为何用UriMatcher。ide
ContentProvider向外界提供了一个标准的,也是惟一的用于查询的接口:spa
其中uri用于指定哪个数据源,当一个数据源含有多个内容(好比多个表),就须要用不一样的Uri进行区分,例如:.net
这时候使用UriMatcher就能够帮助咱们方便的过滤到TableA仍是TableB, 而后进行下一步查询, 若是不用UriMatcher也能够,咱们就须要手动过滤字符串,用起来有点麻烦,可维护性也很差。blog
再说怎么用UriMatcher, 定义以下:接口
在查询中使用UriMatcher:ip
总之,UriMatcher本质上是一个文本过滤器,用在contentProvider中帮助咱们过滤,分辨出查询者想要查询哪一个数据表。字符串
demo:get
UriMatcher类用于匹配Uri,它的用法以下:string
首先第一步把你须要匹配Uri路径所有给注册上,以下:
//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码
UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//若是match()方法匹配content://cn.xxt.provider.personprovider/person路径,返回匹配码为1
sMatcher.addURI(“cn.xxt.provider.personprovider”, “person”, 1);//添加须要匹配uri,若是匹配就会返回匹配码
//若是match()方法匹配content://cn.xxt.provider.personprovider/person/230路径,返回匹配码为2
sMatcher.addURI(“cn.xxt.provider.personprovider”, “person/#”, 2);//#号为通配符
switch (sMatcher.match(Uri.parse("content://cn.xxt.provider.personprovider/person/10"))) {
case 1
break;
case 2
break;
default://不匹配
break;
}
注册完须要匹配的Uri后,就可使用sMatcher.match(uri)方法对输入的Uri进行匹配,若是匹配就返回匹配码,匹配码是调用addURI()方法传入的第三个参数,假设匹配content://cn.xxt.provider.personprovider/person路径,返回的匹配码为1