Uri,UriMatcher,ContentUris工具類簡單介紹
Uri工具類介紹
UriMatcher工具類介紹
ContentUris介紹
Uri工具類介紹
A:Uri是幹什麼的?
關於Uri是什麼,這裡只是簡單的介紹下,全名為“統一資源識別符號“,具體他下面還有url,以及他們的區別,這裡不再介紹,以後再總結。為了方便下面對ContentProvider物件Uri的理解,這裡簡單介紹下Uri子類Url:
Url最常見於網際網路網址:http://www.baidu.com:80/index.asp 這裡http://協議部分,www.baidu.com:80域名部分,index.asp是網站具體頁面資源部分,下面介紹的Uri與這個結構類似。
B:ContentProvider物件中的Uri的作用?有哪些部分組成?
一個常見的ContentProvider中的Uri如下:
content://com.example.mycontentprovider/words 或者 content://com.example.mycontentprovider/word/1
這裡有三部分:
第一部分:content://這個部分是ContentProvider規定的,記住它吧
第二部分:com.example.mycontentprovider這個部分是ContentProvider 的authorities部分,根據這個部分ContentResolver就能找到ContentProvider。
第三部分:words或者word/detail部分,這個是具體的資源部分,當訪問者需要訪問不同資源時,這部分是變化的。
C:Android中的Uri幾種特殊形式介紹。
形式1:content://com.example.mycontentprovider/words //訪問全部資料
形式2:content://com.example.mycontentprovider/word/2 //訪問word資料張ID為2的資料
形式3:content://com.example.mycontentprovider/word/2/word //訪問word資料中ID為2的記錄的word欄位
D:String與Uri如何進行型別轉換?
轉換:String 轉換成 Uri
Uri uri = new Uri(String string);
UriMatcher工具類介紹
A:什麼是UriMatcher?
UriMatcher字面理解就是地址匹配類,他為了方便資料訪問者ContentResolver的意圖進行分類,所以在資料暴露者ContentProvider中對引數Uri進行判斷,同時也是提前確定資料暴露者實際能處理的Uri,根據Uri引數來確定所操作的資料。
具體見下圖:
B:如何建立UriMatcher?
UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);//就這麼簡單
matcher.addURI();//就可以新增ContentProvider根據傳遞過來的Uri能執行那些方法了
D:舉例說明UriMatcher的兩個靜態方法addURI()/match()
void addURI(String authority,String path,int code);
int match(Uri uri);
eg:
UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
matcher.addURi("com.example.mycontentprovider","words",1);
matcher.addURI("com.example.mycontentprovider","word/#",2);
matcher.match("content://com.example.mycontentprovider/words") return 1;
matcher.match("content://com.example.mycontentprovider/word/2") return 2;
matcher.match("content://com.example.mycontentprovider/word/100") return 2;
ContentUris介紹
A:什麼是ContentUris工具類?
ContentUris是一個操作Uri 字串的工具類。
B:他有哪些使用方法?
ContentUris.withAppendedId(Uri uri,int id) return Uri
ContentUris.parseId(Uri uri) return long
C:來個簡單的例項
Uri uri = Uri.parse("content://com.example.mycontentprovider/word");
Uri resultUri = ContentUrils.appendedId(uri,2);
//resultUri = content://com.example.mycontentprovider/word/2;
long wordId = ContentUrils.parseId(uri);
//wordId = 2;