Android開發12:ContentProvider

黎老師的視頻網上沒有了,不能看教學視頻了,找了個參加這個培訓的學員的博客看,學學。
參照http://www.blogjava.net/changcheng/archive/2010/03/02/314322.html

一、ContentProvider簡介

當應用繼承ContentProvider類,並重寫該類用於提供數據和存儲數據的方法,就可以向其他應用共享其數據。雖然使用其他方法也可以對外共享數據,但數據訪問方式會因數據存儲的方式而不同,如:採用文件方式對外共享數據,需要進行文件操作讀寫數據;採用sharedpreferences共享數據,需要使用sharedpreferences API讀寫數據。而使用ContentProvider共享數據的好處是統一了數據訪問方式。

二、Uri類簡介

Uri代表了要操作的數據,Uri主要包含了兩部分信息:1.需要操作的ContentProvider ,2.對ContentProvider中的什麼數據進行操作,一個Uri由以下幾部分組成:

image
1.scheme:ContentProvider(內容提供者)的scheme已經由Android所規定爲:content://。

2.主機名(或Authority):用於唯一標識這個ContentProvider,外部調用者可以根據這個標識來找到它。

3.路徑(path):可以用來表示我們要操作的數據,路徑的構建應根據業務而定,如下:

· 要操作contact表中id爲10的記錄,可以構建這樣的路徑:/contact/10

· 要操作contact表中id爲10的記錄的name字段, contact/10/name

· 要操作contact表中的所有記錄,可以構建這樣的路徑:/contact

要操作的數據不一定來自數據庫,也可以是文件等他存儲方式,如下:

要操作xml文件中contact節點下的name節點,可以構建這樣的路徑:/contact/name

如果要把一個字符串轉換成Uri,可以使用Uri類中的parse()方法,如下:

Uri uri = Uri.parse("content://com.changcheng.provider.contactprovider/contact")

三、UriMatcher、ContentUrist和ContentResolver簡介

因爲Uri代表了要操作的數據,所以我們很經常需要解析Uri,並從Uri中獲取數據。Android系統提供了兩個用於操作Uri的工具類,分別爲UriMatcher 和ContentUris 。掌握它們的使用,會便於我們的開發工作。

UriMatcher用於匹配Uri,它的用法如下:

1.首先把你需要匹配Uri路徑全部給註冊上,如下:

//常量UriMatcher.NO_MATCH表示不匹配任何路徑的返回碼(-1)。

UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

//如果match()方法匹配content://com.changcheng.sqlite.provider.contactprovider/contact路徑,返回匹配碼爲1

uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact”, 1);//添加需要匹配uri,如果匹配就會返回匹配碼

//如果match()方法匹配 content://com.changcheng.sqlite.provider.contactprovider/contact/230路徑,返回匹配碼爲2

uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact/#”, 2);//#號爲通配符

2.註冊完需要匹配的Uri後,就可以使用uriMatcher.match(uri)方法對輸入的Uri進行匹配,如果匹配就返回匹配碼,匹配碼是調用addURI()方法傳入的第三個參數,假設匹配content://com.changcheng.sqlite.provider.contactprovider/contact路徑,返回的匹配碼爲1。

ContentUris用於獲取Uri路徑後面的ID部分,它有兩個比較實用的方法:

· withAppendedId(uri, id)用於爲路徑加上ID部分

· parseId(uri)方法用於從路徑中獲取ID部分

ContentResolver當外部應用需要對ContentProvider中的數據進行添加、刪除、修改和查詢操作時,可以使用ContentResolver 類來完成,要獲取ContentResolver 對象,可以使用Activity提供的getContentResolver()方法。 ContentResolver使用insert、delete、update、query方法,來操作數據。

四、ContentProvider示例程序

爲SQLite示例程序添加ContentProvider類

發佈了49 篇原創文章 · 獲贊 5 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章