Android 中ContentProvider的實(shí)例詳解
Android 中ContentProvider的實(shí)例詳解
Content Provider 的簡(jiǎn)單介紹:
* Android中的Content Provider 機(jī)制可支持在多個(gè)應(yīng)用中存儲(chǔ)和讀取數(shù)據(jù)。這也是跨應(yīng)用
共享數(shù)據(jù)的唯一方式。在A(yíng)ndroid系統(tǒng)中,沒(méi)有一個(gè)公共的內(nèi)存區(qū)域,供多個(gè)應(yīng)用共享存儲(chǔ)數(shù)據(jù);
* Android 提供了一些主要數(shù)據(jù)類(lèi)型的ContentProvider ,比如:音頻、視頻、圖片和私人通訊錄等;
在android.provider 包下面找到一些android提供的ContentProvider;可以通過(guò)獲得ContentProvider,
查詢(xún)他們包含的數(shù)據(jù)(查詢(xún)的條件是:已經(jīng)獲得適當(dāng)?shù)淖x取權(quán)限);
1、Uri的介紹:
Uri代表了要操作的數(shù)據(jù),Uri主要包含了兩部分的信息: * 需要操作的ContentProvider * 對(duì)ContentProvider 中的什么數(shù)據(jù)進(jìn)行操作; 一個(gè)Uri由下列幾個(gè)部分組成: content://cn.itcast.provider.personprovider/person/10
解析:
* content:// :scheme * cn.itcast.provider.personprovider : 主機(jī)名或anthority * person/10 : 路徑 * 10 : ID
1.1: ContentProvider(內(nèi)容提供者)的scheme 已經(jīng)由Android所規(guī)定,scheme為 content://主機(jī)名(或叫Authority)用于唯一標(biāo)識(shí)這個(gè)ContentProvider,外 部調(diào)用者可以根據(jù)這個(gè)標(biāo)識(shí)來(lái)找到它。路徑path,可以用來(lái)表示我們要操作的 數(shù)據(jù),路徑的構(gòu)建應(yīng)根據(jù)業(yè)務(wù)定,例如:
(1) 要操作person表中id為10的記錄,構(gòu)建路徑如下:/person/10;
(2) 要操作person表中id為10 的記錄的name字段:person/10/name;
(3) 要操作person表中的所有記錄: /person;
(4) 要操作xxx表中的記錄: /xxx;
(5) 如果要操作的數(shù)據(jù)部是來(lái)自數(shù)據(jù)庫(kù),而是來(lái)自文件、xml或網(wǎng)絡(luò)等其他存儲(chǔ)方式;
例如:要操作xml文件中person節(jié)點(diǎn)下的name節(jié)點(diǎn),構(gòu)建路徑如下:/person/name
如果要把一個(gè)字符串轉(zhuǎn)換成Uri,可以使用Uri類(lèi)中的parse()方法:
Uri uri = Uri.parse("content://itcast.provider.personprovider/person");
2、UriMatcher 類(lèi)使用介紹:
由于Uri代表了要操作的數(shù)據(jù),所以經(jīng)常需要解析Uri,并從Uri中獲取數(shù)據(jù),Android中提供 了兩個(gè)用于操作Uri的工具類(lèi):
* UriMatcher
* ContentUris
UriMatcher 類(lèi),用于匹配Uri,用法如下:
/* UriMathcer 類(lèi)的用法 */
public void uriMatcher(){
/* 常量UriMatche.NO_MATCH 標(biāo)示部匹配任何路徑的返回碼 */
UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
/* 如果match()方法匹配content://cn.itcast.provider.personprovider/person 路徑,
* 返回匹配碼為 1
*/
/* 添加需要匹配的URL ,如果匹配就會(huì)返回匹配碼 */
sMatcher.addURI("cn.itcast.provider.personprovider", "person", 1);
/* # 為通配符 *//* match():方法匹配:content://cn.itcast.provider.personprovider/person/230
* 路徑, 返回匹配碼2
* */
sMatcher.addURI("cn.itcast.provider.personprovider", "person/#", 2);
/* 按上述添加的規(guī)則進(jìn)行匹配,不同的路徑匹配返回不同的匹配碼 *//* 下列路徑返回的匹配碼為 2 */
int code = sMatcher.match(Uri.parse("content://cn.itcast.provider.personprovider/person/10"));
}
提示:
注冊(cè)需要匹配的Uri后,就可以使用sMatcher.match(uri)方法對(duì)輸入的Uri進(jìn)行匹配,如果匹配
就返回匹配碼,匹配碼是調(diào)用addURI()方法傳入的第三個(gè)參數(shù);
3、ContentUris 類(lèi)的使用介紹:
ContentUris類(lèi),用于獲取Uri路徑后面的ID部分,有兩個(gè)比較實(shí)用的方法:
* withAppended(uri,id) 用于為路徑加上ID 部分;
Uri uri = Uri.parse("content://cn.itcast.provider.personprovider/person");
/* 為路徑添加ID部分 */
Uri resultUri = ContentUris.withAppendedId(uri, 10);
/* 添加后的值為:content://cn.itcast.provider.personprovider/person/10 */
* parseID(uri) 從路徑中獲取ID 部分;
Uri uri = Uri.parse("content://cn.itcast.provider.personprovider/person/10");
/* 下列獲取到的結(jié)果是:10 */
long personid = ContentUris.parseId(uri);
如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,大家共同進(jìn)步,感謝 閱讀,希望能幫助到大家,謝謝大家對(duì)苯中的支持,
- Android使用ContentProvider初始化SDK庫(kù)方案小結(jié)
- 基于A(yíng)ndroid FileProvider 屬性配置詳解及FileProvider多節(jié)點(diǎn)問(wèn)題
- Android ContentProvider實(shí)現(xiàn)手機(jī)聯(lián)系人讀取和插入
- Android利用ContentProvider獲取本地?cái)?shù)據(jù)的方法
- Android7.0行為變更之適配File Provider的方法
- Android7.0中關(guān)于ContentProvider組件詳解
- Android 中自定義ContentProvider與ContentObserver的使用簡(jiǎn)單實(shí)例
- Android控件AppWidgetProvider使用方法詳解
- Android編程之桌面小部件AppWidgetProvider用法示例
- Android實(shí)現(xiàn)花瓣飄落效果的步驟
相關(guān)文章
Android 模仿iPhone列表數(shù)據(jù)View刷新動(dòng)畫(huà)詳解
本文主要介紹Android 模仿iPhone列表數(shù)據(jù)view 刷新動(dòng)畫(huà)的資料,這里整理詳細(xì)的資料,并附示例代碼及實(shí)現(xiàn)效果圖,有興趣的小伙伴可以參考下2016-09-09
Android網(wǎng)絡(luò)編程之UDP通信模型實(shí)例
這篇文章主要介紹了Android網(wǎng)絡(luò)編程之UDP通信模型實(shí)例,本文給出了服務(wù)端代碼和客戶(hù)端代碼,需要的朋友可以參考下2014-10-10
Android自定義View實(shí)現(xiàn)顏色選取器
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)顏色選取器 ,類(lèi)似SeekBar的方式通過(guò)滑動(dòng)選擇顏色,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
Android自定義TimeButton實(shí)現(xiàn)倒計(jì)時(shí)按鈕
這篇文章主要為大家詳細(xì)介紹了Android自定義TimeButton實(shí)現(xiàn)倒計(jì)時(shí)按鈕,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
Flutter實(shí)現(xiàn)底部導(dǎo)航欄
這篇文章主要為大家詳細(xì)介紹了Flutter實(shí)現(xiàn)底部導(dǎo)航欄的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02
Android底部菜單欄實(shí)現(xiàn)的實(shí)例代碼
這篇文章主要介紹了Android底部菜單欄實(shí)現(xiàn)的實(shí)例代碼,本文通過(guò)使用RadioGroup來(lái)實(shí)現(xiàn)底部導(dǎo)航菜單欄?,F(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
Android BitmapUtils工具類(lèi)使用詳解
這篇文章主要為大家詳細(xì)介紹了Android BitmapUtils工具類(lèi)的使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
Android函數(shù)抽取殼的實(shí)現(xiàn)代碼
很早之前就想寫(xiě)這類(lèi)的殼,最近終于把它做出來(lái)了,取名為dpt,下面把代碼分享出來(lái),對(duì)Android函數(shù)抽取殼的實(shí)現(xiàn)代碼感興趣的朋友一起看看吧2022-01-01
Flutter構(gòu)建自定義Widgets的全過(guò)程記錄
在Flutter實(shí)際開(kāi)發(fā)中,大家可能會(huì)遇到flutter框架中提供的widget達(dá)不到我們想要的效果,這時(shí)就需要我們?nèi)プ远xwidget,下面這篇文章主要給大家介紹了關(guān)于Flutter構(gòu)建自定義Widgets的相關(guān)資料,需要的朋友可以參考下2022-01-01
Android學(xué)習(xí)之AppWidget高級(jí)效果
這篇文章主要為大家詳細(xì)介紹了Android學(xué)習(xí)之AppWidget高級(jí)效果的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-08-08

