Android聯絡人讀取操作筆記

2021-08-26 00:23:08 字數 2549 閱讀 6849

android中的聯絡人都儲存在乙個sqlite資料庫中,有興趣的可以使用adb直接push出來看一下裡面的表和檢視的結構,

它的路徑為:/data/data/com.android.providers.contacts/databases/contacts2.db

在聯絡人資料庫中,儲存的都是一些小的資料表,即與把所有資料儲存成乙個表不同,它會對聯絡人的資料模組化,然後分成多個表儲存。

表與表之間使用id相關聯起來,這樣做的目的是盡量減小資料表的規模,提高資料檢索的速度,因為我們檢索的時候不是每次都需要讀取所有的聯絡人資料的,這樣可以更靈活的選擇我們所關心的內容,提高檢索速度,

雖然分開的儲存資料,可以提高檢索的速度,但是也給我們帶來了一些不便,就是需要把這些分開的表再重新聯合起來,組成我們所需要的完整的資料。好在這些,android已經替我們準備好了,它在資料庫裡面建了一些檢視,呵呵,檢視就是虛擬表。並且,android也提供了很多介面,通過contentresolver().query方法,傳入不同的uri即可訪問相應的資料集。

在聯絡人資料庫裡面聯絡人和**號碼是分別存在兩個表裡面的,因為存在乙個聯絡人擁有幾個號碼的情況,所以android為聯絡人和手機號碼分別單獨建立了相應的檢視。

聯絡人資訊的檢視裡面只儲存與聯絡人相關的資料,例如姓名,是否有手機號碼等。

而手機號碼資料則是每乙個**號碼為一條記錄,如果有乙個聯絡人有3個號碼,則裡面會出現3個該聯絡人的記錄,號碼分別為他的三個號碼。

如果是需要讀取聯絡人資訊,傳入的uri為:contactscontract.contacts.content_uri

如果是需要讀取手機號碼資訊傳入的uri為:contactscontract.commondatakinds.phone.content_uri

下面再看看query函式的原型,只讀取關心的字段,應該可以提高一點速度

query

(uriuri,stringprojection,stringselection,stringselectionargs,stringsortorder)

projection:是需要讀取的字段

selection:是資料檢索的條件

selectionargs:是資料檢索條件的引數

sortorder:是排序的字段

在android聯絡人表裡面乙個兩個比較有意思的字型sort_key和sort_key_alt,它裡面儲存的是聯絡人名字的拼音字母,

例如聯絡人名字是「李明」,則sort_key儲存的是「li李ming明」,這樣如果是按sort_key或sort_key_alt排序的話,就可以實現按漢字的拼音字母排序了,,,

下面給讀取系統所有聯絡人的**片段,讀取所有的聯絡人,然後每讀乙個聯絡人,再把該聯絡人的所有號碼讀出來

(這個因為需要不斷的去檢索資料庫,所以會很慢,大家有什麼方法提高sqlite資料庫的檢索的方法沒??):

// the selected cols for contact users

string selectcol = new string;

public static final int col_name = 0;

public static final int col_has_phone = 1;

public static final int col_id = 2;

// the selected cols for phones of a user

string selphonecols = new string ;

public static final int col_phone_number = 0;

public static final int col_phone_name = 1;

public static final int col_phone_type = 2;

public void getcontactlist()

if (cursor.getcount() == 0)

cursor.movetofirst();

while(!cursor.isafterlast()) while(phonecursor.movetonext());}}

cursor.movetonext();

} }

讀取所有號碼的片段:

/**

* yao.guet

* blog:

*/// the selected cols for phones numbers

string selphonecols = new string ;

public static final int col_phone_number = 0;

public static final int col_phone_name = 1;

public static final int col_phone_type = 2;

public static final int col_phone_label = 3;

public contactscursoradapter getcontactcursorlist()

Android操作聯絡人

android系統中的聯絡人也是通過contentprovider來對外提供資料的,我們這裡實現獲取所有聯絡人 通過 號碼獲取聯絡人 新增聯絡人 使用事務新增聯絡人。獲取所有聯絡人 1.android系統中的聯絡人也是通過contentprovider來對外提供資料的 2.資料庫路徑為 data d...

Android操作聯絡人

一 聯絡人資料庫 聯絡人的資料庫檔案的位置 data data com.android.providers.contacts databases.contacts2.db 資料庫中重要的幾張表 1 contacts表 該錶儲存了所有的手機測聯絡人,每個聯絡人佔一行,該錶儲存了聯絡人的 contact...

android 讀取手機聯絡人

authorities 當局 1 到開發環境data data 目錄下 com.android.providers.contacts databases 匯出到左面contacts2.db 2 用工具開啟資料庫關心三張表 raw contacts data mimetypes 3 建立乙個新的工程去...