无法加载联系人



我尝试了许多可用示例,这些示例有助于加载电话中的联系人。它在模拟器上正常工作,但是当我尝试实时移动设备时,它会崩溃。任何人都可以将经过测试的代码寄给我。然后我可以与我的代码进行比较。

一个失败的代码示例。

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
if (phones.getCount() > 0)
{
    while (phones.moveToNext())
    {
            name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    }
phones.close();

请帮助。

确保phones不是null。如果不是null,请添加此行将指针移动到第一部电话:

cursor.moveToFirst();

这是代码的片段,例如它应该如何工作:

Uri contactData = data.getData();
    //Cursor cursor =  managedQuery(contactData, null, null, null, null);
    Cursor cursor =  cr.query(contactData, null, null, null, null);
    cursor.moveToFirst();
    String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
    String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));

    if (Integer.parseInt(cursor.getString(
            cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
        Cursor pCur = cr.query(
                                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                                null, 
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                                new String[]{id},
                                null);
        while (pCur.moveToNext()) {
            String number = pCur.getString(pCur.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
            break; // ? we want only 1 value
        } 
        pCur.close();
    }
    cursor.close();

假设它将帮助您

首先,将其添加到清单文件中:

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

到您的AndroidManifest.xml文件,您可以这样循环浏览电话联系人:

     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 (Boolean.parseBoolean(hasPhone)) { 
     // You know it has a number so now query it like this
       Cursor phones = getContentResolver().query(    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,   ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null); 
         while (phones.moveToNext()) { 
        String phoneNumber = phones.getString(phones.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER));                 
         } 
      phones.close(); 
         }
        Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,  ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null); 
         while (emails.moveToNext()) { 
      // This would allow you get several email addresses 
       String emailAddress = emails.getString( 
        emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
        } 
        emails.close();
          }
       cursor.close(); 

最新更新