最近要忙于工作了,工作中的事情有點多,也沒時間做ui了。不過,等過一點時間充裕。會繼續推出新的學ui部落格。感謝大家的關注!!!
這篇部落格,主要是要介紹android聯系人資料操作,講解一些工作中遇到的一些新情況。分享給大家!
從android2.2以後,android又經過幾個版本的更新,聯系人這塊的操作已經發生了很大的變化。這次先講解今天遇到兩個資料操作問題:
一、聯系人中im資料怎樣更新?
先看im有哪些資料,看圖:

總共類型,大概有10種,包括使用者可以自定義類型。
先介紹主要的im類中的主要的字段:
統一的查詢uri:contactscontract.data.content_uri
所有的資料存放,基本上都在contactscontract .data類中,如想取資料:
private static final string[] projection = new string[] {
data.contact_id,
data.data1, data.data2,
data.data3, data.data4,
data.data5, data.data6,
data.data7, data.data8,
data.data9, data.data10,
data.mimetype
};
查詢的條件必須加上類型,如:contactscontract.commondatakinds.im.content_item_type
如果是查詢im資料,則需要關心,以下幾個字段:
data.raw_contact_id表示聯系人的id
data.mimetype:表示mime類型,查im則類型為:im.content_item_type
data.data1:表示使用者填寫的資料,如:是qq類型,則此為qq号:123456789
data.data2:表示資料類型,個人感覺是源碼中對應的此類型:(目前手機中讀取出來的值都為3)
public static final int type_home = 1;
public static final int type_work = 2;
public static final int type_other = 3;
也看圖,有圖有真相:
添加資料圖:
兩條基本資料,一條自定義資料。
看看資料庫中的結果圖:
data2就是type,是不是都是3啊(用手機測試,也是這個值)。
data.data5:在源碼中是im.protocol:它才表示的是真正的類型,如源碼中對應的類型:
public static final int protocol_custom = -1;
public static final int protocol_aim = 0;
public static final int protocol_msn = 1;
public static final int protocol_yahoo = 2;
public static final int protocol_skype = 3;
public static final int protocol_qq = 4;
public static final int protocol_google_talk = 5;
public static final int protocol_icq = 6;
public static final int protocol_jabber = 7;
public static final int protocol_netmeeting = 8;
而當protocol的取值為-1時,則要取出data.data6的值。
data.data6 :在源碼中是im.custom_protocol字段,它表示是使用者自定義的值,
也就是隻有data5為-1時,這個取取出來才不是null(上圖能很好的證明了)
基本上隻要了解這幾個字段,就能正确的完成im資料的操作。
二、怎樣更新website資料?
下面,再介紹一個很是糾結的資料:website
website在手機中,是可以插入多條資料,但在操作的資料庫,是不能區分多條資料(不知道為啥)。
做項目,當然不能憑感覺說話,要找到證據才能說明問題,這時候,當然去看資料庫,有圖有真相:
這是我編輯的兩條資料,也沒有類型選擇。是以,用類型區分是不可能的。此點已證明。
接下來看資料庫中儲存的内容,看看最終儲存的結果,就知道結果:
從上面的資料,可以看出來儲存的資料,也沒有字段區分這兩條資料。是以,再一次證明,推論正确。
這是website的問題,但下面看一下website需要操作的字段:
data.mimetype:表示mime類型,查website類型為:website.content_item_type
website.type:表示類型,對應的類型如下:(但手機中都對應的是7,感覺基本無用)
public static final int type_homepage = 1;
public static final int type_blog = 2;
public static final int type_profile = 3;
public static final int type_home = 4;
public static final int type_work = 5;
public static final int type_ftp = 6;
public static final int type_other = 7;
website.url:對應data.data1資料:表示使用者輸入的資料,如:www.csdn.com
website.label:暫時無用了。
website操作結論:要想實作更新,就隻能先删除,再重新插入。
這兩個類型資料,比較簡單,隻要知道操作哪些資料了,基本就沒什麼問題了。
操作的代碼不在電腦上,是以,就不上傳了。如果大家對此有任何疑問,歡迎一起讨論!!!
後續,還會再研究聯系人中的其它字段。歡迎大家關注了,如發現有錯誤的地方,歡迎指正!!!
修正:
website資料,它的源碼:
這個類中的主要資料隻有這些,其實看到它定義了類型,就知道,它應該也可以添加為多條。
在以前的分析中,由于隻是在模拟器中分析,發現它不能添加多條,是以,就有一個錯誤的地方。
現在在moto裡程碑二中,是有多條資料的。是以,它的type和label也是有用的。
在此說明一下。
補充:im說明
文章前面講述了從源碼中的一些字段說明,這裡要再提一下的是,對于相同類型的資料,在data表中隻能通過_id
來辨別,除此之外,想要通過其它字段做更新,是不可行的。
如下圖,添加的兩條資料:
被紅線圈的資料,就是類型一樣的資料。除了 id是無法區分的。
後面要糾正上文對im解釋中的一些問題:
這是im字段的源碼。其實它有type字段,在資料表中是data.data2表示。
當type為custom(為0)的時候,這時就是自定義的資料類型。這個時候
自定義的名稱為label,存在data.data3字段中。
而這裡需要說明的一點是,im是有一個protocol字段,用data.data5存儲。
它表示是哪種協定的im,如qq、skype等。
如果是自定義類型的,則在custom_protocol,也就是data.data6字段中,存有一份和data3一樣的資料。
是以,對im操作,首先要注意:data2的資料類型。若為自定義的,就要取label值。
接着要注意:data5的值,它能判斷出來是哪種im.
這些說明,希望能幫助大家更好的了解資料庫表,如有問題,歡迎交流!!!