天天看點

[android研究聯系人之一]聯系人IM/website資料操作

最近要忙于工作了,工作中的事情有點多,也沒時間做ui了。不過,等過一點時間充裕。會繼續推出新的學ui部落格。感謝大家的關注!!!

這篇部落格,主要是要介紹android聯系人資料操作,講解一些工作中遇到的一些新情況。分享給大家!

從android2.2以後,android又經過幾個版本的更新,聯系人這塊的操作已經發生了很大的變化。這次先講解今天遇到兩個資料操作問題:

一、聯系人中im資料怎樣更新?

       先看im有哪些資料,看圖:

[android研究聯系人之一]聯系人IM/website資料操作

總共類型,大概有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;

           也看圖,有圖有真相:

          添加資料圖:

[android研究聯系人之一]聯系人IM/website資料操作

          兩條基本資料,一條自定義資料。

        看看資料庫中的結果圖:

[android研究聯系人之一]聯系人IM/website資料操作

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在手機中,是可以插入多條資料,但在操作的資料庫,是不能區分多條資料(不知道為啥)。

做項目,當然不能憑感覺說話,要找到證據才能說明問題,這時候,當然去看資料庫,有圖有真相:

[android研究聯系人之一]聯系人IM/website資料操作

這是我編輯的兩條資料,也沒有類型選擇。是以,用類型區分是不可能的。此點已證明。

接下來看資料庫中儲存的内容,看看最終儲存的結果,就知道結果:

[android研究聯系人之一]聯系人IM/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

來辨別,除此之外,想要通過其它字段做更新,是不可行的。

如下圖,添加的兩條資料:

[android研究聯系人之一]聯系人IM/website資料操作

被紅線圈的資料,就是類型一樣的資料。除了 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.

這些說明,希望能幫助大家更好的了解資料庫表,如有問題,歡迎交流!!!