安卓四大組建之ContentPrvider之通訊錄

通過本章學習利用contentProvider來讀取本地手機聯繫人以及本地SQLite存儲。

contentProvider

跨進程共享機制,也就是所謂的跨應用程序。
可以我這個應用程序和別的應用程序共享一個數據庫。還可以共享文件等。
系統也有一些自帶的contentProvider供我們共享。

contentResolver

訪問別人的私有數據庫。

Anroid中聯繫人相關操作

思考問題:
1、聯繫人數據存儲到哪了?
SQlite:一般一個應用程序只操作自己創建的這個私有數據庫,不會操作別人的私有數據庫。

系統聯繫人數據庫

com.android.provider.contact:安卓內置的應用程序,存儲再這個應用程序的私有數據庫當中。要想訪問這個私有數據庫,就要訪問他的contentProvider,就可以拿到聯繫人的相關數據。然後再把聯繫人數據拿出來。

這裏寫圖片描述

contacts表:
這裏寫圖片描述
該表保存了所有的手機聯繫人,包括每個聯繫人id、聯繫次數(times_contacted)、最後一次聯繫的時間(last_time_contactde)、是否含有電話號碼(has_phone_number)、是否被收藏(starred)等信息。來看看以下字段:
_id :表id,主要用於其他表通過該字段來查找相應的數據。
主鍵:_id
pohto_id
data表:
這裏寫圖片描述
該表保存了所有創建過的手機聯繫人的信息保存在列data1至data15中,該表保存了兩個ID:mimetype_id和raw_contact_id,從而將data表和raw_contacts表,mimetypes表聯繫起來了。
mimetype_id(外鍵字段):存儲當前字段屬於什麼類型(例如5:電話號碼、名字)。
raw_contact_id(外鍵字段):關聯聯繫人 contacts表(分別代表幾號人)
data1:具體文字數據(電話、地址、郵箱、姓名)注意:頭像不在這裏面,因爲這裏面都是存的字符串。
data15:具體二進制圖片數據
mimwtypes表:
這裏寫圖片描述
存儲當前字段屬於什麼類型.
他主要是定義了聯繫人的數據類型,如果我們想自己定義一個聯繫人屬性需要在這個表中添加,例如:我想擴展添加一個微信號,我們可以這樣vnd.android.cursor.item/weichat,可以存儲微信號等屬性,有興趣的可以去自己實現一下。
raw_contacts表:
這裏寫圖片描述
主鍵:_id與contacts表主鍵id是一樣的。與contacts表示一 一對應的關係
該表中的字段比較多,也包含了大量的信息,對於我們實現聯繫人列表有很大的作用,這裏我只調幾個字段來看看,其他的可以自己查看:
_id:其他表如contacts,data表可以通過raw_contact_id來查找raw_contacts表中的數據。
contact_id:通過該字段raw_contacts表就可以去查找contacts表,這樣兩張表就聯繫起來了。
display_name(display_name_alt):聯繫人姓名,不用多說。
sort_key:我們在取數據時可以安裝該字段來排序。這樣我們取到的數據就是排好順序的。
phone_book_label:聯繫人首字母,我們可以取得該字段來實現類似微信通訊錄聯繫人的效果。
deleted:該聯繫人是否被刪除。
calls表
通話記錄
簡介

例如查詢劉亦菲的電話:

語句示範:
select XXX from XXX where XXXX
select 查詢什麼字段 from 哪張表 where 條件

(1)查處劉亦菲的id
select raw_contact_id from data where data1=”劉亦菲”;
(2)查處相應id的電話數據:
方法1:
select data1 from data where raw_contact_id=1 and mimetype_id =5;(raw_contact_id=1爲上面查出來的數據)
select data1 from data where raw_contact_id=1 and mimetype_id =8;(raw_contact_id=1爲上面查出來的數據)
select data1 from data where raw_contact_id=1 and mimetype_id =1;(raw_contact_id=1爲上面查出來的數據)
select data1 from data where raw_contact_id=1 and mimetype_id =7;(raw_contact_id=1爲上面查出來的數據)
select data1 from data where raw_contact_id=1 and mimetype_id =10;(raw_contact_id=1爲上面查出來的數據)

方法2:
select data1,data15,mimetyp_id from data where raw_contact_id=1 ;
if(mimetyp_id==1){
…….
}else id(mimetyp_id==5){
…….
}

查詢所有聯繫人的信息:

(1)查詢所有的聯繫人,獲取每個聯繫人的id
select _id,photo_id from contacts;
1,5
2,10
3,15
(2)通過每個人的id,查詢data表中的其他字段數據(每查出來一條記錄,就去data表中去查)
方法1:
select data1,data15 from data where raw_contact_id=1
方法2:
select data1,data15,mimetype_id from data where raw_contact_id=1;
if(mimetype_id==”name”){
}else if(mimetype==”address”){
}

添加聯繫人:

數據庫表關聯

舉例子:

關於員工信息的數據庫表:
emp(id,name,salary,deptId);
1,張三,1000,1
2,李四,1000,1
3,王五,1000,2
部門表:
dept(id,name,location)
1,財務部,北京
2,研發部,上海

查詢語句:
select * from emp where name=”李四”;
查詢結果(不完整,未顯示部門信息):
2,李四,1000,1
查詢語句:(再查部門信息)
select * from dept where id=1;
查詢結果:
1,財務部,北京

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章