正在学习Android,想先找个简单点的东西练习一下,先想到的是通讯录,不过关于手机通讯录方面的资料在我现有的书和视频上都很少看到。没办法只有自己看SDK Docs了。
不管怎么说还是先赞Google的Android Docs,确实很全面,只要你想找就一定能找到你要的东西。不过我感觉想把里面的各个类的关系联系起来还是有点困难,特别是像英文水平过于一般的我,看的那叫个累呀。
好了,还是来说一下正题吧。Android刚开始在通讯录方面好像是提供的Contacts这个类,又在SDK2.0发布后新加了一个ContactsContract,然后就不建议用Contacts这个旧的类了。有新的东西,当然要用新的了。
对于ContactsContact官方文档里面说它是基于一个三层的数据模型存储的,由于本人不是专门搞软件,什么意思我也说不出来,个人的一个大致的理解就是,它是由三个主要的数据库组成的。这三个数据模型就是以ContactsContact.Data,ContactsContact.RawContacts,ContactsContact.Contacts。
三个模型的功能大致为,
Data:存储通讯录中每个人的全部信息,什么名字,电话,E-mail等一些乱七八糟和东西全在里面。
RawContacts:这个里面好像是说存储的是个人描述信息和一些唯一确定的相关的帐号
Contacts:这个好像是通讯录里面的一个人的基本描述,像什么显示的名字,分组情况,有没有电话号码之类的了。
反正后面两个搞的真是懵懵的,我先不管这两个了。因为Data里面说它包括通讯录里每个人的全部信息,以理论上说对通讯录的全部操作都可以用这个来搞定。所以我也是选的它,降低难度嘛。
关于Data,看一下文档里面的详细内容,里面主要说了一个“数据类型”(Data kinds),对应的是Data.MIMETYPE这个列。我们还是先不管这个,之后再说。我刚用的时候对它还很是纠结了一把。
Data里面也是含有对数据的“增删改查”四个基本操作,看到这里基本可以确定它肯定是一个数据库了。官方每个操作都提供了一些事例代码。第一次玩当然是从简单的“查”来入手了。
官方给的代码有两个,我主要看的第二个,因在后面的官方描述中CONTACT_ID好像就是RAW_CONTACT_ID:
1
2
3
4
5
|
Cursor c = getContentResolver().query(Data.CONTENT_URI, new String[] {Data._ID, Phone.NUMBER, Phone.TYPE, Phone.LABEL}, Data.RAW_CONTACT_ID + "=?" + " AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'" , new String[] {String.valueOf(rawContactId)}, null ); |
这个代码里面一般至少都能意会出它是在做什么。就是通过联系人ID查找他的电话号码,电话类型,和电话标签。像里的Data._ID中的Data就是ContactsContact.Data,Phone.TYPE里面的Phone就是ContactsContract.CommonDataKinds.Phone。
通过上面的代码我们可以知道,要查找一个通讯录可以通过ContentResolver的query()方法来查找,最终返回一个游标Cursor,通过Cursor的get***方法就可以把想要的数据读出来了。关于query方法,可以说就一个生成一相格式化SQL语句的方法。它有五个参数,简单的理解就是(uri相当于要查询的表名,你要查询哪几个字段用String数组表示,查询条类似Where后面的部分,如果前面的参数里面有?的点位符这个参数就是它对应的值,排序)。
看了这个代码有点查询通讯录的概念了,不过现在可能有人就有问题要问了,官方的代码里面怎么不把联系人的姓名查出来,因为就算我们不懂代码,单看英文怎么也没有Name这类的单词啊。查联系人怎么说也要有名字有电话,不然要它干什么。是不是官方太懒了多加个字段不行么?
我这个外行人花了点时间的学习后,发现官方的这个代码好像还真查不了名字,或者说是专门来查电话的……
但是要同时得到姓名还对应的电话号码,我们才能算的上有点成果吧,现在的东西似乎还没多大用。
要完成这套流程,就要说一下我刚开始提到的那个所谓的“数据类型”Data.MIMETYPE了。
由于本人水平有限,如有错误,请尽量指正,共同学习嘛!
来源URL:http://www.cnblogs.com/3dant/archive/2010/12/08/1900634.html