聯絡人的獲取 ContentProvider

2021-07-05 21:15:06 字數 3047 閱讀 3759

contentprovider:

1、contentprovider為儲存和讀取資料提供統一的介面;

2、使用contentprovider,應用程式可以實現資料共享;

uri:universal resource identifier 

e.g:聯絡人uri 為content://contacts/people

1:需要操作的contentprovider;2:對contentprovider中的什麼資料進行操作

由以下幾個部分組成:

contentprovider(內容提供者)的scheme已經由android規定,scheme為:content://

主機名(authority)用於唯一標識這個contentprovider,外部呼叫者可以根據這個標識來找到它;contacts

路徑(path)可以用來表示我們要操作的資料:/people

使用contentresolver操作contentprovider中的資料:

當外部應用需要對contentprovider中的資料進行新增、刪除、修改和查詢操作時,可以使用contentresolver類來完成(使用getcontentresolver()方法獲取);

contentresolver類提供了與contentprovider類相同簽名的四個方法:

public uri insert(uri uri,contentvalues values):該方法用於往contentprovider新增資料。

public int delete(uri uri,string selection,string selectionargs);該方法用於從contentprovider刪除資料。

public int update(uri uri,contentvalues values,string selection,string selectionargs);該方法用於更新contentprovider中的資料。

public cursor query(uri uri,string projection,string selection,string selectionargs,string sortorder):該方法用於從contentprovider獲取資料。

e.g:

contentresolver resolver = getcontentresolver();//獲取contentresolver

uri uri = uri.parse(「content://contacts/people」);//要操作的contentprovider

contentvalues values = new contentvalues();

values.put(「name」,」sunrise");

values.put(「number」,」18617191218」);  

resolver.insert(uri,values);

監聽contentprovider中資料的變化

呼叫getcontentresolver().notifychange(uri,null)來通知註冊在此url上的訪問者。

listview ******adapter:

/********adapter屬於adapter介面卡的一種,是資料和listview之間的橋梁

* 第乙個引數:activitiy的上下文

* 第二個引數:生成的乙個map列表選項

* 第三個引數:listview一行的分布樣式,可以自己定義,可以使用android系統本身

* 第四個引數:定義map中有哪些key

* 第五個引數:用來填充的元件,對應於第四個引數中的key

**/

adapter

=new

******adapter(

this

, getdata(),

r.layout.

listview,  

new string,

newint);

getdata():返回乙個list>的乙個列表。

/**定義儲存資料的list,並返回給******adapter**/

list> contact =

newarraylist>();

/**使用contentresolver操作contentprovider中的資料**/

contentresolver resolver = getcontentresolver();

/**使用query獲取contentprovider的資料

android2.0以後聯絡人就由contactscontract類替換了people類

**/cursor c = resolver.query(contactscontract.contacts.

content_uri

, null

, null

, null

, null);

/*獲取特定的資料列,並按照聯絡人姓名排列*/

cursor c = resolver.query(contactscontract.contacts.

content_uri

, phones_projection

, null

, null

, "display_name desc");

第乙個引數:url,確定要操作的資料(指定所要操作的contentprovider)

第二個引數:指定列的資料

第三個引數:指定行的資料

第四個引數:

第五個引數:可以定義返回資料的排列

然後使用cursor來對我們的聯絡人資料進行處理:

行、列;

e.g:獲取聯絡人姓名

/*首先獲取聯絡人處於該資料庫的第幾列*/

intdisplaynamecolumn = c.getcolumnindex(contactscontract

.contacts.display_name);

/*然後獲取該列的資料即是要取得的聯絡人的姓名(行數由c.movotonext()來互動)*/

string name = c.getstring(displaynamecolumn)

IOS Contacts獲取聯絡人

新框架中將要使用最多的應該就是cncontactstore這個類了,官方對其的定義是乙個執行緒安全的,用來執行查詢和修改操作的類。此外官方還針對於這個類的使用給出了幾點小建議。1.只去查詢那些你需要的聯絡人屬性。2.當查詢所有聯絡人並快取結果時,首先查詢所有聯絡人的identifier,然後通過id...

獲得聯絡人

注意在 後要加上 貌似從android2.0開始,聯絡人的api做了很大的調整。people介面由contactscontract.contacts代替。在聯絡人的 號碼中有很多種,如果只想獲得手機號碼。如下 cursor phones mcontext.getcontentresolver que...

同步聯絡人

從我的舊的n70手機中同步聯絡人到新的android手機中。首先,安裝nokia的pc套件,匯出手機中的所有聯絡人到電腦硬碟中。儲存成 csv 檔案形式。登陸gmail,在gmail的左邊有通訊錄一覽,可以匯入csv檔案,將所有聯絡人儲存到gmail中。此時開啟android 手機中的通訊錄,就可以...