ContentProvider基本使用

2021-07-15 06:54:34 字數 3718 閱讀 1560

在不同應用之間實現資料共享,並保證安全性

比較:」新增」沒有條件約束,」刪除」沒有資料contentvalues

getcontentresolver().insert(uri uri, contentvalues values)

getcontentresolver().update(uri uri, contentvalues values, string where, string selectionargs)

getcontentresolver().delete(uri uri, string where, string selectionargs)

cursor = getcontentresolver().query(contactscontract.commondatakinds

.phone

.content_uri,null, null, null, null);

while (cursor.movetonext())

//加入許可權

android.permission

.read_contacts

public

class

myprovider

extends

contentprovider

@override

public cursor query(uri uri, string projection, string selection,

string selectionargs, string sortorder)

@override

public uri insert(uri uri, contentvalues values)

@override

public

intupdate(uri uri, contentvalues values, string selection,string selectionargs)

@override

public

intdelete(uri uri, string selection, string selectionargs)

@override

public string gettype(uri uri)

}

oncreate()

初始化內容提供器的時候呼叫。通常會在這裡完成對資料庫的建立和公升級等操作,

返回 true 表示內容提供器初始化成功,返回 false 則表示失敗。注意,只有當存在

contentresolver 嘗試訪問我們程式中的資料時,內容提供器才會被初始化。

query()

從內容提供器中查詢資料。使用 uri 引數來確定查詢哪張表,projection 引數用於確

定查詢哪些列,selection 和 selectionargs 引數用於約束查詢哪些行,sortorder 引數用於

對結果進行排序,查詢的結果存放在 cursor 物件中返回。

insert()

向內容提供器中新增一條資料。使用 uri 引數來確定要新增到的表,待新增的資料

儲存在 values 引數中。新增完成後,返回乙個用於表示這條新記錄的 uri。

update()

更新內容提供器中已有的資料。使用 uri 引數來確定更新哪一張表中的資料,新數

據儲存在 values 引數中,selection 和 selectionargs 引數用於約束更新哪些行,受影響的

行數將作為返回值返回。

delete()

從內容提供器中刪除資料。使用 uri 引數來確定刪除哪一張表中的資料,selection

和 selectionargs 引數用於約束刪除哪些行,被刪除的行數將作為返回值返回。

gettype()

根據傳入的內容 uri 來返回相應的 mime 型別。

在路徑後加入id可以訪問到具體的行

內容 uri 的格式主要就只有以上兩種,以路徑結尾就表示期望訪問該表中所有的資料,

以 id 結尾就表示期望訪問該表中擁有相應 id 的資料。可以使用萬用字元的方式來分別匹

配這兩種格式的內容 uri,這就是內容uri模式

uri要判斷兩種情況:

使用urimatcher

方法 adduri() 會將許可權和路徑對映到乙個整型值。 方法 match() 會返回 uri 的整型值

public

class

myprovider

extends

contentprovider

…… @override

public cursor query(uri uri, string projection, string selection,

string selectionargs, string sortorder)

……}

contentprovider中抽象方法string gettype(uri uri),用來獲取mime型別

乙個內容 uri 所對應的 mime字串主要由三部分組分:

1. 必須以 vnd 開頭。

2. 如果內容 uri 以路徑結尾,則後接 android.cursor.dir/,如果內容 uri 以 id 結尾,

則後接 android.cursor.item/。

3. 最後接上 vnd.< authority >.< path >

一般都形如:

vnd.android.cursor./vnd.< authority >.< path >

示例

查表中所有內容

查確定的行

**示例

@override

public string gettype(uri uri)

return

null;

}

// 指定該類的全名

android:name="com.example.databasetest.databaseprovider"

//指定內容提供器的許可權

android:authorities="com.example.databasetest.provider"

//是否可以被其他程式訪問

android:exported="true">

如何新增Content Provider

一 寫在前面 一直很好奇系統是如何通過 content 來訪問歸屬地資料庫的,通過研究 和api參考文件以及網路上的資料基本上弄明白了,於是有了以下的內容。二 android content provider介紹 三 content provider的組成 四 新增content provider ...

ContentProvider簡單使用

一是使用內容提供器讀取和操作其他應用程式的資料 二是建立內容提供器給該程式的資料提供外部訪問介面 如 簿,簡訊,庫,都有內容提供器讓它們的資料有外部訪問介面 內容提供器提供的資料外部訪問介面是乙個uri.它由authority和path組成 path相當於不同的表加在authority的後面。如有表...

使用ContentProvider共享資料

當應用繼承contentprovider類,並重寫該類用於提供資料和儲存資料的方法,就可以向其他應用共享其資料。以前我們學習過檔案的操作模式,通過指定檔案的操作模式為context.mode world readable 或context.mode world writeable同樣可以對外共享資料...