com.android.contacts.ui.EditContactActivity类就是编辑联系人的界面,界面下有两个按钮,分别是“保存”和“放弃”。看看EditContactActivity类的声明,它实现了View.OnClickListener接口,并且重写了
第一步:
到EditContactActivity类重写的public void onClick(View view)方法里去,加上这样一段代码(写到保存或者放弃里都可以):
第二步:
编译代码(我是在android源代码上直接修改)的contects应用,并且把编译出来的Contacts.apk文件部署到手机或模拟器(这个编译和部署的步骤我就不详写了,更不要问我android源代码是怎么下载的,呵呵)。cmd命令行打开,用adb logcat命令观看触发事件时打印出来的东西(androidSDK完全配置好后,自己去研究一下adb命令)。
Contacts.apk文件部署好后,打开手机联系人,新建一个联系人,随便输入名字、姓氏和电话号码,点保存或放弃的按钮去触发你写的onClick事件,在logcat里我的打印结果如下:
Testgivenname是我输入的Given name 值
TestFamilyname是我输入的Family name值
13800138000是我输入的电话号码
分析:
编辑联系人的所有数据都存储在mState里面!!!它EditContactActivity类的成员变量,看看它的声明EntitySet mState;这个EntitySet(com.android.contacts.model.EntitySet)类其实是个ArrayList,里面的元素都是EntityDelta型,看看
- public void onClick(View view);
public void onClick(View view);
方法,所以它在onCreate的时候,就set了这两个按钮的onclick事件为this。
第一步:
到EditContactActivity类重写的public void onClick(View view)方法里去,加上这样一段代码(写到保存或者放弃里都可以):
- //把mState遍历一遍全打印出来
- if (mState != null)
- {
- for(EntityDelta haha: mState)
- {
- System.out.println(haha.toString());
- }
- }
//把mState遍历一遍全打印出来
if (mState != null)
{
for(EntityDelta haha: mState)
{
System.out.println(haha.toString());
}
}
第二步:
编译代码(我是在android源代码上直接修改)的contects应用,并且把编译出来的Contacts.apk文件部署到手机或模拟器(这个编译和部署的步骤我就不详写了,更不要问我android源代码是怎么下载的,呵呵)。cmd命令行打开,用adb logcat命令观看触发事件时打印出来的东西(androidSDK完全配置好后,自己去研究一下adb命令)。
Contacts.apk文件部署好后,打开手机联系人,新建一个联系人,随便输入名字、姓氏和电话号码,点保存或放弃的按钮去触发你写的onClick事件,在logcat里我的打印结果如下:
- I/System.out( 2104): ({ _id=-1, account_name=null, account_type=null, }) =
- I/System.out( 2104): {
- I/System.out( 2104): { _id=-7, mimetype=vnd.android.cursor.item/nickname, data2=1, }
- I/System.out( 2104): { _id=-6, mimetype=vnd.android.cursor.item/note, }
- I/System.out( 2104): { _id=-2, data1=13800138000, mimetype=vnd.android.cursor.item/phone_v2, data2=1, }
- I/System.out( 2104): { _id=-5, mimetype=vnd.android.cursor.item/photo, }
- I/System.out( 2104): { _id=-4, mimetype=vnd.android.cursor.item/name, data2=Testgivenname, data3=TestFamilyname, }
- I/System.out( 2104): { _id=-3, mimetype=vnd.android.cursor.item/email_v2, data2=1, }
- I/System.out( 2104): }
I/System.out( 2104): ({ _id=-1, account_name=null, account_type=null, }) =
I/System.out( 2104): {
I/System.out( 2104): { _id=-7, mimetype=vnd.android.cursor.item/nickname, data2=1, }
I/System.out( 2104): { _id=-6, mimetype=vnd.android.cursor.item/note, }
I/System.out( 2104): { _id=-2, data1=13800138000, mimetype=vnd.android.cursor.item/phone_v2, data2=1, }
I/System.out( 2104): { _id=-5, mimetype=vnd.android.cursor.item/photo, }
I/System.out( 2104): { _id=-4, mimetype=vnd.android.cursor.item/name, data2=Testgivenname, data3=TestFamilyname, }
I/System.out( 2104): { _id=-3, mimetype=vnd.android.cursor.item/email_v2, data2=1, }
I/System.out( 2104): }
Testgivenname是我输入的Given name 值
TestFamilyname是我输入的Family name值
13800138000是我输入的电话号码
分析:
编辑联系人的所有数据都存储在mState里面!!!它EditContactActivity类的成员变量,看看它的声明EntitySet mState;这个EntitySet(com.android.contacts.model.EntitySet)类其实是个ArrayList,里面的元素都是EntityDelta型,看看
- public class EntitySet extends ArrayList<EntityDelta>
public class EntitySet extends ArrayList<EntityDelta>
就知道了。所以上面的haha调用的toString()方法其实就在EntityDelta类(com.android.contacts.model.EntityDelta)里。ok,到EntityDelta里去找到toString()方法,对照打印出来的结果研究一下到底是怎么打印出来的,然后把姓、名、电话号码等数据就可以随便提取出来了。