String username = (String) cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));能够得到。
String phoneNumber=(String)cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));得不到
String name []= cursor.getColumnNames();
for (String string : name) {
CustomLog.v("11111111111111111111111:"+string);
}
遍历了发现每台手机的name值是不同的。怎么解决这个问题?
------解决方案--------------------
你当前这个游标不能获取到ContactsContract.CommonDataKinds.Phone.NUMBER里的内容,即'data1'字段里的内容,要先用当前cursor获取到当前联系人的ID,再由此ID建立新的查询集,得到新的游标phoneCursor就可使用data1读取到电话号码了,讲了这多糊涂了,看下面源代码吧,或许能帮上你!
- Java code
String string=""; super.onCreate(savedInstanceState); ContentResolver cr=getContentResolver(); Cursor cursor=cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); while(cursor.moveToNext()){ //取得联系人的名字 int nameFieldColumnIndex=cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME); String name=cursor.getString(nameFieldColumnIndex); string+=(name); //得到此联系人拥有的号码总数 int numberCount=cursor.getInt(cursor.getColumnIndex(PhoneLookup.HAS_PHONE_NUMBER)); if(numberCount>0){ //取得联系人的ID String contactID=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); Cursor phone=cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+contactID, null, null);//新的查询集,得到新的游标 //取得其所有的电话号码 string+="_"+phone.getCount(); while(phone.moveToNext()){ int resType=phone.getInt(((phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)))); String phoneNum=phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); //依据得到的TYPE类型获取其全局资源符 resType=ContactsContract.CommonDataKinds.Phone.getTypeLabelResource(resType); string+=" "+getString(resType)+": "+phoneNum; } string+="\n"; phone.close(); } } cursor.close();
------解决方案--------------------
在ContactsListActivity中有一个方法叫:getPhoneNumber(),你可以参照这个方法看一下,是怎么做的。
其实和楼上讲的基本一样。