2016-04-07 12 views
1

Diese Auswahl-Klausel in meinem Cursor Abfrage gibt nur die Kontakte, die eine Telefonnummer haben, das ist, was ich will: canWie kann ich Telefonnummern von entsprechenden Namen in meinen Kontakten erhalten?

// this query only return contacts with phone number and is not duplicated 
     phones = getContentResolver().query(
//    the table to query 
       ContactsContract.Contacts.CONTENT_URI, 
//    the columns to return 
       null, 
//    selection criteria : 
// we only want contacts that have a name and a phone number. If they have a phone number, the value is 1 (if not, it is 0) 
       ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + ("1") + "'" + " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1", 
//    selection criteria 
       null, 
//    display in ascending order 
       ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); 

Aber wie:

// we only want contacts that have a name and a phone number. If they have a phone number, the value is 1 (if not, it is 0) 
       ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + ("1") + "'" + " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1", 

Meine ganze Cursor Abfrage sieht wie folgt aus Ich bekomme die tatsächliche Telefonnummer für jeden Kontakt? Kann ich dem obigen Code etwas hinzufügen oder muss ich eine neue Cursor-Abfrage starten?

Ich denke, es ist das letztere.

Ich begann eine neue Cursor-Abfrage als Ausgangspunkt: Ich

phonestwo = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
          null, 
          ContactsContract.CommonDataKinds.Phone.IN_VISIBLE_GROUP + " = '" + ("1") + "'" + " AND " + ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER + "=1", 
          null, 
          null); 

Aber in Protokollen in logcat bin immer die Telefone Cursor 134 Datensätze hat (richtig, was ich will!) Und meine phonestwo Cursor hat 196 Aufzeichnungen. Kurz gesagt, wie kann ich Telefonnummern erhalten, die diesen 134 Datensätzen entsprechen?

Antwort

0
public class MainActivity extends Activity { 


    Cursor cursor; 
    ListView mainListView; 
    ArrayList hashMapsArrayList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (cursor != null) { 
      cursor.moveToFirst();} 
     try { 

      cursor = getApplicationContext().getContentResolver() 
        .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); 
      int Idx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID); 
      int nameIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); 

      int phoneNumberIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
      int photoIdIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_THUMBNAIL_URI); 
      cursor.moveToFirst(); 


      Set<String> ids = new HashSet<>(); 
      do { 
       System.out.println("=====>in while"); 
       String contactid=cursor.getString(Idx); 
       if (!ids.contains(contactid)) { 
        ids.add(contactid); 
        HashMap<String, String> hashMap = new HashMap<String, String>(); 
        String name = cursor.getString(nameIdx); 
        String phoneNumber = cursor.getString(phoneNumberIdx); 
        String image = cursor.getString(photoIdIdx); 
        System.out.println("Id--->"+contactid+"Name--->"+name); 
        System.out.println("Id--->"+contactid+"Name--->"+name); 
        System.out.println("Id--->"+contactid+"Number--->"+phoneNumber); 

        if (!phoneNumber.contains("*")) { 
         hashMap.put("contactid", "" + contactid); 
         hashMap.put("name", "" + name); 
         hashMap.put("phoneNumber", "" + phoneNumber); 
         hashMap.put("image", "" + image); 
         // hashMap.put("email", ""+email); 
         if (hashMapsArrayList != null) { 
          hashMapsArrayList.add(hashMap);} 
//     hashMapsArrayList.add(hashMap); 
        } 
       } 

      } while (cursor.moveToNext()); 


     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      if (cursor != null) { 
       cursor.close(); 
      } 
     } 
} 
} 
1

Um die mit einem Kontakt verknüpften Telefonnummern abzurufen, müssen Sie den Contacts Content Provider erneut drücken.

Erste phones Cursor für die ID des Kontakts fragen -

String phoneContactId = phones.getString(phones.getColumnIndexOrThrow(BaseColumns._ID)); 

Und dann für jeden phoneContactId Sie alle ihm zugeordneten Telefonnummern holen -

Cursor pCur = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
         ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { phoneContactId }, null); 

while (pCur.moveToNext()) { 
        int phoneType = pCur.getInt(pCur.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.TYPE)); 
        String phoneNumber = pCur 
          .getString(pCur.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

       }