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