首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

获取通讯录名字正确。号码获取不到,该怎么处理

2012-02-09 
获取通讯录名字正确。号码获取不到String username (String) cursor.getString(cursor.getColumnIndex(Co

获取通讯录名字正确。号码获取不到
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(),你可以参照这个方法看一下,是怎么做的。
其实和楼上讲的基本一样。

热点排行