2016-07-13 9 views
1

ich bin ein paar Tests machen, um herauszufinden, wie die Provider mit Ereignissen arbeiten usw.Lese Geburtstag von ContactProvider, ungültige Spalte

Ich versuche, alle Kontakte von bestimmten Konten zu erhalten, dann lasen Details von jedem Kontakt zu Holen Sie sich den Geburtstag, wenn vorhanden.

Zuerst habe ich versucht, es in 1 zu tun, aber ich hatte nicht genug Kenntnisse des Anbieters, also versuche ich es in 2 Schritten zu tun, nur um zu sehen, ob ich es erreichen kann.

ich Ungültige Spalte auf dieser Linie. Cursor Cursor = cr.query (uri, Projektion, [...] Die contact_id ist das Problem hier Wie kann ich die zweite Abfrage verbessern die Daten zu erhalten, möchte ich ? nirgendwo ich verschiedene Mods auf der Code immer versucht

Dank

der Code, den ich benutzen...

private void readContacts(){ 
     Cursor contByAccCursor = getContactsByAccounts();  
     getContactsBirthdays(contByAccCursor); 
    } 

    private Cursor getContactsByAccounts() { 
     Uri uri = ContactsContract.RawContacts.CONTENT_URI; 
     String[] projection = new String[] { 
       ContactsContract.RawContacts.CONTACT_ID, 
       ContactsContract.RawContacts.ACCOUNT_TYPE 
     }; 
     String where = ContactsContract.RawContacts.ACCOUNT_TYPE + " IN ('com.google', 'vnd.sec.contact.phone', 'com.skype.contacts.sync')"; 
     return activity.getContentResolver().query(uri, 
                projection, 
                where, 
                null, 
                null); 
    } 

    private void getContactsBirthdays(Cursor filteredContacts) { 
     Uri uri = ContactsContract.Contacts.CONTENT_URI; 

     String[] projection = new String[] { 
       //ContactsContract.Contacts.DISPLAY_NAME_PRIMARY, 
       ContactsContract.CommonDataKinds.Event.CONTACT_ID, 
       ContactsContract.CommonDataKinds.Event.START_DATE 
     }; 
     String where = 
       ContactsContract.Data.MIMETYPE + "= ? AND " + 
       ContactsContract.CommonDataKinds.Event.TYPE + "=" + 
       ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY + " AND " + 
       ContactsContract.CommonDataKinds.Event.CONTACT_ID + "= ?"; 

     String[] selectionArgs; 
     String sortOrder = null; 

     StringBuffer sb = new StringBuffer(); 

     ContentResolver cr = activity.getContentResolver(); 

     int accTypeCol = filteredContacts.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE); 

     while(filteredContacts.moveToNext()){ 

      selectionArgs = new String[] { 
        ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE, 
        filteredContacts.getString(filteredContacts.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID)) 
      }; 

      Cursor cursor = cr.query(uri, 
         projection, 
         where, 
         selectionArgs, 
         sortOrder); 

      if(cursor.moveToNext()){     
       String dName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME_PRIMARY)); 
       String bDay = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE)); 
       String accType = filteredContacts.getString(accTypeCol); 

       sb.append(dName + "("+accType+")" + " - " + bDay); 
       sb.append("\n"); 
      } 
     }  
     Log.d(TAG, sb.toString()); 
    } 

Antwort

0

Ok ich so dumm fühle mich jetzt der Fehler ist der zweite content_uri, ich war immer der falsche, muss müde sein ...

Dies ist die richtige uri die richtigen Daten zu erhalten:

private void getContactsBirthdays(Cursor filteredContacts) { 
     Uri uri = ContactsContract.Data.CONTENT_URI; 
Verwandte Themen