0

Привет, я работаю над каталогом контактов, я создал пользовательские журналы вызовов, Noe, я хочу отображать контактные данные, когда один из контактов нажат, у меня есть первый контакт contact_id с контактным номером, а затем с помощью функции поиска через Интернет я получил функцию, чтобы получить все детали от контакта ид, я положил его в мой код, но он не работает, не дает мне результаты,Получение контакта с контактом Идентификатор, не работающий в android

public void getDetials(String contactID) { 
     Uri myPhoneUri = Uri.withAppendedPath(
       ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
       Uri.encode(contactID)); 

     // Query the table 
     @SuppressWarnings("deprecation") 
     Cursor phoneCursor = managedQuery(myPhoneUri, null, null, null, null); 

     // Get the phone numbers from the contact 
     for (phoneCursor.moveToFirst(); !phoneCursor.isAfterLast(); phoneCursor 
       .moveToNext()) { 

      // Get a phone number 
      String phoneNumber = phoneCursor 
        .getString(phoneCursor 
          .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

      //get name 
      String phonename = phoneCursor 
        .getString(phoneCursor 
          .getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 




      //get email 
      String phoneemail = phoneCursor 
        .getString(phoneCursor 
          .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Email.DATA)); 

      //get image uri..!! 
      String img_uri = phoneCursor 
        .getString(phoneCursor 
          .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.PHOTO_URI)); 
      System.out 
        .println("=============my phone number ,is===================" 
          + phoneNumber + "======in call info=="+"\n =========name is===="+phonename+"=================email is========"+phoneemail); 
      System.out.println("======myimgae url fopr the contact is============="+img_uri); 

     } 

    } 
+0

Я интересно ли вы забыли передать 'projection' для запроса. Это может привести к тому, что у вас нет данных, если нет действительного 'projection' – rude

+0

, можете ли вы отправить какой-либо код или изменить его код? –

+0

читайте http://developer.android.com/reference/android/provider/ContactsContract.Data.html – pskink

ответ

0

Здесь метод для чтения всех телефонных номеров и электронных писем для указанного контакта:

public void getContactDetails(int contactId) { 
    Log.d("Details", "---"); 
    Log.d("Details", "Contact : " + contactId); 
    final Cursor phoneCursor = getContentResolver().query(
      ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
      new String[] { 
        ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 
        ContactsContract.CommonDataKinds.Phone.NUMBER, 
        ContactsContract.CommonDataKinds.Phone.PHOTO_URI, 
      }, 
      Data.CONTACT_ID + "=?", 
      new String[] {String.valueOf(contactId)}, null); 

    try { 
     final int idxAvatarUri = phoneCursor.getColumnIndexOrThrow(
       ContactsContract.CommonDataKinds.Phone.PHOTO_URI); 
     final int idxName = phoneCursor.getColumnIndexOrThrow(
       ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); 
     final int idxPhone = phoneCursor.getColumnIndexOrThrow(
       ContactsContract.CommonDataKinds.Phone.NUMBER); 

     while (phoneCursor.moveToNext()) { 
      String phoneNumber = phoneCursor.getString(idxPhone); 
      String name = phoneCursor.getString(idxName); 
      String avatarUri = phoneCursor.getString(idxAvatarUri); 

      Log.d("Details", "Phone number: " + phoneNumber); 
      Log.d("Details", "Name: " + name); 
      Log.d("Details", "Avatar URI: " + avatarUri); 
     } 
    } finally { 
     phoneCursor.close(); 
    } 

    final Cursor emailCursor = getContentResolver().query(
      ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
      new String[] { 
        ContactsContract.CommonDataKinds.Email.ADDRESS, 
      }, 
      Data.CONTACT_ID + "=?", 
      new String[] {String.valueOf(contactId)}, null); 

    try { 
     final int idxAddress = emailCursor.getColumnIndexOrThrow(
       ContactsContract.CommonDataKinds.Email.ADDRESS); 
     while (emailCursor.moveToNext()) { 
      String address = emailCursor.getString(idxAddress); 
      Log.d("Details", "Email: " + address); 
     } 
    } finally { 
     emailCursor.close(); 
    } 
} 

Обратите внимание, что один контакт может содержать несколько телефонных номеров и электронных писем.

Вот как получить все контакты детали:

final Cursor cur = getContentResolver().query(Data.CONTENT_URI, 
     new String[]{Data.CONTACT_ID}, null, null, null); 
try { 
    final int idxId = cur.getColumnIndex(Data.CONTACT_ID); 
    while (cur.moveToNext()) { 
     final int id = cur.getInt(idxId); 
     getContactDetails(id); 
    } 
} finally { 
    cur.close(); 
} 

Не забудьте добавить разрешение:

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

его очень sloooow: сравните его с этим: http://stackoverflow.com/a/26820544/2252830 – pskink

+0

привет, спасибо для ответа, позвольте мне попробовать это. –

+0

@pskink вы определенно правы – rude

Смежные вопросы