2017-02-01 12 views
0

У меня есть приложение, в котором я хочу получить несколько номеров одного контакта по щелчку элемента. У меня есть вид списка контактов, в котором я хочу несколько номеров контакта, если контакт имеет более одного номера. Вот мой код, Я получаю все цифры, но не могу получить несколько номеров в Click.Как найти все номера одного контакта в андроиде программно?

MainActivity.java

ContentResolver cr = getContentResolver(); 
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
      null, null, null); 
    String phone = null; 
    String emailContact = null; 
    String emailType = null; 
    String image_uri = ""; 
    Bitmap bitmap = null; 
    if (cur.getCount() > 0) { 
     while (cur.moveToNext()) 
     { 
      String id = cur.getString(cur 
        .getColumnIndex(ContactsContract.Contacts._ID)); 
      String name = cur 
        .getString(cur 
          .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

      image_uri = cur 
        .getString(cur 
          .getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI)); 
      if (Integer 
        .parseInt(cur.getString(cur 
          .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
       System.out.println("name : " + name + ", ID : " + id); 

       Cursor pCur = cr.query(
         ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
         null, 
         ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
           + " = ?", new String[]{id}, null); 
       while (pCur.moveToNext()) 
       { 
        phone = pCur 
          .getString(pCur 
            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

        String phone1 = pCur 
          .getString(pCur 
            .getColumnIndex(String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE))); 
         Log.e("PHONE",phone1); 
        System.out.println("phone" + phone); 
       } 
       pCur.close(); 

       Cursor emailCur = cr.query 
         (
         ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
         null, 
         ContactsContract.CommonDataKinds.Email.CONTACT_ID 
           + " = ?", new String[]{id}, null); 
       while (emailCur.moveToNext()) 
       { 
        emailContact = emailCur 
          .getString(emailCur 
.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 


if(TextUtils.isEmpty(emailContact)||emailContact.equalsIgnoreCase(null)|| 
emailContact.equalsIgnoreCase("")){ 
         emailContact=""; 

         Log.e("isEmpty","isEmpty " + emailContact); 
        }else{ 
         Log.e("gfdszfg","Email " + emailContact); 
        } 
        /* emailType = emailCur 
          .getString(emailCur 
            .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));*/ 

        Log.e("gfdszfg","Email " + emailContact); 

       } 

       emailCur.close(); 
      } 

      if (image_uri != null) { 
       System.out.println(Uri.parse(image_uri)); 
       try { 
        bitmap = MediaStore.Images.Media 
          .getBitmap(this.getContentResolver(), 
            Uri.parse(image_uri)); 

        System.out.println(bitmap); 

       } catch (FileNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 

      mList.add(new Contacts(name, phone, image_uri,emailContact)); 
      emailContact=""; 
     } 
     cur.close(); 
     mMyContactsAdapter = new MyContactsAdapter(MainActivity.this, 
    mList); 
     mcontact.setAdapter(mMyContactsAdapter); 
    } 
} 
+0

см. Http://stackoverflow.com/a/26820544/2252830 – pskink

ответ

0

Похоже, вы правильно переборе всех телефонов для каждого контакта, но когда цикл, а заканчивается, phone указывает только на последний телефон вы нашли ,

... 
List<String> phonesList = new ArrayList<String>(); 
while (pCur.moveToNext()) { 
    phone = pCur.getString(... Phone.NUMBER)); 
    // add the phone to a growing list of phones 
    phonesList.add(phone); 
} 
pCur.close(); 
... 
// Change 'Contacts' constructor to accept List<String>, rather then String for phone 
mList.add(new Contacts(name, phonesList, image_uri,emailContact)); 
... 

Конечно, вы можете сделать то же самое для электронной почты, и если вы хотите ярлык телефона тоже вам нужен список пара: List<Pair<String, String>> держать пары телефона + этикетку.

На стороне обратите внимание на характеристики этого кода могут быть улучшены significantly, запрашивая ContactsContract.Data.CONTENT_URI для ВСЕХ электронной почты и телефоны на устройстве, помещая их все в HashMap, а затем перебор всех контакты, и получать электронную почту и телефоны от HashMap. Это уменьшит количество запросов от <number of contacts>*2 до 2.

+0

Как я могу получить несколько номеров контакта, когда я нажму на свой список @marmor –

+0

, если вы настроите начальный список контактов, как я предложил выше, вы У вас есть список объектов «Контакты», каждый из которых содержит список телефонов. поэтому, когда элемент кликается, вам не нужно запрашивать что-либо из БД, просто получите список телефонов с нажатого объекта «Контакты» – marmor