如果他们有电话号码,如何获得所有联系人的全名和电话号码?

时间:2012-01-12 23:12:03

标签: java android cursor android-contacts phone-number

我正在尝试获取所有拥有电话号码的联系人,并记录他们的全名和电话号码(以及将来的联系人照片),但我被困住了。这是我的代码:

String contacts = "";

    Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); 
    while (cursor.moveToNext()) {
       String contactId = cursor.getString(cursor.getColumnIndex( 
       ContactsContract.Contacts._ID)); 
       String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
       if (hasPhone == "1") {
           contacts += cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)) + ":" + "how to get number?" + "|";
       }
    }
    cursor.close();

如果联系人有电话号码,则字符串hasPhone应包含“1”,然后将该名称和人员电话号码添加到“联系人”字符串中。尽管hasPhone确实包含“1”,(从logcat检查)条件语句中没有代码运行。另外,如何获取电话号码,ContactsContract.Contacts中没有数字。

2 个答案:

答案 0 :(得分:1)

更改为:

hasPhone.equals("1")

==运算符检查对象是否相等,也就是说,如果hasPhone与“1”的对象相同,那么显然是假的。

你想要检查Lexicographic的相等性,所以你应该使用String的equals方法,它比较两个Objects字符串的相等性,这意味着检查两者是否具有相同的字符顺序。

此外,请考虑使用LookupKey,如下所述:http://developer.android.com/resources/articles/contacts.html

如果您想保存特定联系人的未来参考资料。

答案 1 :(得分:1)

试试这个:

if (Integer.parseInt(hasPhone) > 0) { 
    Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +"="+ contactId, null, null); 
    phones.moveToNext(); //if you are interested in all contact phones do a while()
    String phoneNumber = phones.getString(phones.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER));
    phones.close();
    contacts += cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)) + ":" + phoneNumber + "|";
}