2017-02-01 4 views
0

Ich habe eine Anwendung, wo ich mehrere Nummern eines einzelnen Kontakts auf den Klick des Elements abrufen möchten. Ich habe eine Listenansicht von Kontakt, in dem ich mehrere Nummern eines Kontakts möchte, wenn der Kontakt mehr als 1 Nummer hat. Hier ist mein Code, Ich bekomme alle Zahlen, aber kann nicht die mehreren Zahlen auf klicken.Wie finden Sie alle Nummern eines einzelnen Kontakts in Android programmatisch?

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

siehe http://Stackoverflow.com/a/26820544/2252830 – pskink

Antwort

0

Es scheint, wie sind Sie richtig durch alle Handys für jeden Kontakt laufen, aber wenn die while-Schleife endet, phone zeigt nur auf die letzte Telefon Sie gefunden haben .

... 
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)); 
... 

Natürlich können Sie die gleiche E-Mails tun, und wenn Sie das Etikett des Telefons zu wollen, müssen Sie eine Liste von Paaren benötigen: List<Pair<String, String>> Paare Telefon zu halten + label.

Auf einer Seite beachten Sie die Leistung dieses Codes kann durch Abfragen ContactsContract.Data.CONTENT_URI für ALLE E-Mails und Telefone auf dem Gerät significantly verbessert werden, um sie alle in einem HashMap und dann Iterieren alle Kontakte, und bekommen die E-Mails und Telefone setzen aus der HashMap. Dies reduziert die Anzahl der Abfragen von <number of contacts>*2 auf nur 2.

+0

Wie bekomme ich mehrere Nummern eines Kontakts, wenn ich auf meine Listenansicht @marmor –

+0

klicke, wenn Sie die erste Kontaktliste wie oben vorgeschlagen, Sie einrichten Ich habe eine Liste von "Kontakte" -Objekten, die jeweils eine Liste von Telefonen enthalten. Wenn Sie also auf ein Element klicken, müssen Sie nichts aus der Datenbank abfragen, sondern nur die Liste der Telefone aus dem angeklickten Objekt "Kontakte" abrufen – marmor

Verwandte Themen