从联系人列表中获取联系人姓名

时间:2014-03-08 12:34:10

标签: java android sqlite cursor

我正在尝试从手机的联系人列表中获取联系人列表的名称,我在第一行尝试时出错:ContentResolver cr = ContactFragment.getActivity().getContentResolver();
有什么帮助吗?

ContactFragment.java

private String refreshData() {
   String namedata = "";
   try {
        /**************************************************/
       ContentResolver cr = ContactFragment.getActivity().getContentResolver();
       Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
           "DISPLAY_NAME = '" + namedata + "'", null, null);
       if (cursor.moveToFirst()) {
           String contactId =
               cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
           //
           //  Get all phone numbers.
           //
           Cursor phones = cr.query(Phone.CONTENT_URI, null,
               Phone.CONTACT_ID + " = " + contactId, null, null);
           while (phones.moveToNext()) {
               String number = phones.getString(phones.getColumnIndex(namedata));

           phones.close();
       }

   }
}

1 个答案:

答案 0 :(得分:0)

尝试这样:

在清单文件中设置此标记:

<uses-permission android:name="android.permission.READ_CONTACTS" />

试试这段代码:

Cursor cursor = null;
    try {
        cursor = context.getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);
        int contactIdIdx = cursor.getColumnIndex(Phone._ID);
        int nameIdx = cursor.getColumnIndex(Phone.DISPLAY_NAME);
        int phoneNumberIdx = cursor.getColumnIndex(Phone.NUMBER);
        int photoIdIdx = cursor.getColumnIndex(Phone.PHOTO_ID);
        cursor.moveToFirst();
        do {
            String idContact = cursor.getString(contactIdIdx);
            String name = cursor.getString(nameIdx);
            String phoneNumber = cursor.getString(phoneNumberIdx);
            //...
        } while (cursor.moveToNext());  
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }