2010-12-06 15 views
7

La plupart des choses fonctionnaient lorsque je demandais des données de contact. Je me bats avec StructuredName et Organization. Ils ne travaillent pas pour moi.Problèmes avec ContactsContract.CommonDataKinds.StructuredName

Si cela ne vous dérange pas s'il vous plaît jeter un oeil sur le code. Il est fabriqué à la main et beaucoup de vérification des erreurs est supprimé pour le rendre aussi petit que possible d'être posté ici. Les commentaires avec "ne fonctionne pas" sont les parties qui ne fonctionnent pas pour moi.

Les deux premiers if() font partie de onActivityResult où je reçois les données à la fin de la sélection du contact. Appel est fait avec:

intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
startActivityForResult(intent, Main.DIALOG_PICKCONTACT); 

Un grand merci à l'avance HJW

if (requestCode == Main.DIALOG_PICKCONTACT) { 
if (resultCode == RESULT_OK) { 
    int i; 
    String s; 
    Cursor cursorContacts = managedQuery(intent.getData(), 
     null, 
     null, 
     null, 
     null); 
    if (cursorContacts != null) { 
    if (cursorContacts.moveToNext()) { 
    ContentResolver contentResolver = getContentResolver(); 
    String contactId = cursorContacts.getString(cursorContacts.getColumnIndex(ContactsContract.Contacts._ID)); 
    i = cursorContacts.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); 
    // cursorContacts.getString(i); *** is DISPLAY_NAME 
    Cursor cursorEmail = contentResolver.query(
     ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
     null, 
     ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
     new String[] { contactId }, 
     null); 
    if (cursorEmail != null) { 
    while (cursorEmail.moveToNext()) { 
     int type = cursorEmail.getInt(cursorEmail.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); 
     s = cursorEmail.getString(cursorEmail.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
     switch (type) { 
     case ContactsContract.CommonDataKinds.Email.TYPE_HOME: 
     // s *** is private Email 
     break; 
     case ContactsContract.CommonDataKinds.Email.TYPE_WORK: 
     // s *** is business Email 
     break; 
     } 
    } 
    cursorEmail.close(); 
    } 
    Cursor cursorOrganization = contentResolver.query(
     ContactsContract.Data.CONTENT_URI, 
     null, 
     ContactsContract.CommonDataKinds.Organization.CONTACT_ID + " = ?", 
     new String[] { contactId }, 
     null); 
    if (cursorOrganization != null) { 
    if (cursorOrganization.moveToNext()) { 
     s = cursorOrganization.getString(cursorOrganization.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA)); 
     // s *** Company name not working 
     s = cursorOrganization.getString(cursorOrganization.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE)); 
     // s *** Function within company not working 
    } 
    cursorOrganization.close(); 
    } 
    s = cursorContacts.getString(cursorContacts.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
    if (Integer.parseInt(s) > 0) { 
    Cursor cursorPhone = contentResolver.query(
     ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
     null, 
     ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", 
     new String[] { contactId }, 
     null); 
    if (cursorPhone != null) { 
     while (cursorPhone.moveToNext()) { 
     int type = cursorPhone.getInt(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); 
     s = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
     switch (type) { 
     case ContactsContract.CommonDataKinds.Phone.TYPE_FAX_HOME: 
     // s *** is private fax 
     break; 
     case ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK: 
     // s *** is business fax 
     break; 
     case ContactsContract.CommonDataKinds.Phone.TYPE_HOME: 
     // s *** is private phone 
     break; 
     case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE: 
     // s *** is mobile phone 
     break; 
     case ContactsContract.CommonDataKinds.Phone.TYPE_WORK: 
     // s *** is business phone 
     break; 
     case ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE: 
     // s *** is business mobile 
     break; 
     } 
     } 
     cursorPhone.close(); 
    } 
    } 
    Cursor cursorStructuredName = contentResolver.query(
     ContactsContract.Data.CONTENT_URI, 
     null, 
     ContactsContract.CommonDataKinds.StructuredName.CONTACT_ID + " = ?", 
     new String[] { contactId }, 
     null); 
    if (cursorStructuredName != null) { 
    if (cursorStructuredName.moveToNext()) { 
     i = cursorStructuredName.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME); 
     // cursorStructuredName.getString(i); *** given name not working 
     i = cursorStructuredName.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME); 
     // cursorStructuredName.getString(i); *** middle name not working 
     i = cursorStructuredName.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.PREFIX); 
     // cursorStructuredName.getString(i); *** prefix not working 
     i = cursorStructuredName.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.SUFFIX); 
     // cursorStructuredName.getString(i); *** suffix not working 
    } 
    cursorStructuredName.close(); 
    } 
    Cursor cursorStructuredPostal = contentResolver.query(
     ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI, 
     null, 
     ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID + " = ?", 
     new String[] { contactId }, 
     null); 
    if (cursorStructuredPostal != null) { 
    while (cursorStructuredPostal.moveToNext()) { 
     int type = cursorStructuredPostal.getInt(cursorStructuredPostal.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE)); 
     s = cursorStructuredPostal.getString(cursorStructuredPostal.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY)); 
     switch (type) { 
     case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME: 
     //s *** is private country 
     break; 
     case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK: 
     // s *** is business country 
     break; 
     } 
     s = cursorStructuredPostal.getString(cursorStructuredPostal.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY)); 
     switch (type) { 
     case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME: 
     // s *** is private city 
     break; 
     case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK: 
     // s *** is business city 
     break; 
     } 
     s = cursorStructuredPostal.getString(cursorStructuredPostal.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE)); 
     switch (type) { 
     case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME: 
     // s *** is private postcode 
     break; 
     case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK: 
     // s *** is business postcode 
     break; 
     } 
     s = cursorStructuredPostal.getString(cursorStructuredPostal.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET)); 
     switch (type) { 
     case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME: 
     // s *** is private street 
     break; 
     case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK: 
     // s *** is business street 
     break; 
     } 
    } 
    cursorStructuredPostal.close(); 
    } 
    Cursor cursorWebsite = contentResolver.query(
     ContactsContract.Data.CONTENT_URI, 
     null, 
     ContactsContract.CommonDataKinds.Website.CONTACT_ID + " = ?", 
     new String[] { contactId }, 
     null); 
    if (cursorWebsite != null) { 
    while (cursorWebsite.moveToNext()) { 
     i = cursorWebsite.getColumnIndex(ContactsContract.CommonDataKinds.Website.URL); 
     int type = cursorWebsite.getColumnIndex(ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE); 
     s = cursorWebsite.getString(i); 
     switch (type) { 
     case ContactsContract.CommonDataKinds.Website.TYPE_HOME: 
     // s *** private url not working 
     break; 
     case ContactsContract.CommonDataKinds.Website.TYPE_WORK: 
     // s *** business url not working 
     break; 
     } 
    } 
    cursorWebsite.close(); 
    } 
    } 
    cursorContacts.close(); 
    } 
} 
} 
+0

Salut, bon travail .. Avez-vous la solution pour obtenir des données de l'Organisation? Merci d'avance. –

Répondre

13

Votre état où est erroné.

Utilisez ce pour StructuredName:

// projection 
    String[] projection = new String[] {ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME}; 


    String where = ContactsContract.Data.RAW_CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
    String[] whereParameters = new String[]{this.contact_id, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE}; 

    //Request 
    Cursor contacts = this.resolver.query(ContactsContract.Data.CONTENT_URI, projection, where, whereParameters, null); 

    //Iteration 
    if (contacts.moveToFirst()) { 
     //code here 
    } 
    contacts.close(); 
+0

Désolé pour cette réponse tardive. Ça n'a pas marché pendant des semaines, alors j'ai abandonné ça. Avec votre aide j'ai réexaminé plus et avec beaucoup de changements et essais je pourrais obtenir le plus de travail (pas de site Web). Merci beaucoup. Cependant, il doit y avoir quelque chose de mal. Il existe plusieurs alias manquants: ContactsContract.CommonDataKinds.StructuredName.CONTENT_URI et ContactsContract.CommonDataKinds.Website.CONTENT_URI par exemple. Cet alias existe pour tous les autres: ContactsContract.CommonDataKinds.Email.CONTENT_URI ou ContactsContract.CommonDataKinds.Phone.CONTENT_URI - pour n'en citer que deux. –

+0

Ingénieux! Si je pouvais vous aurais fait monter deux fois, vous résolvez mon problème de combat d'une heure! –

+0

Cela m'a aidé à résoudre mon problème où les noms donnés/famille étaient 1/null respectivement. La clé pour moi était la clause where qui doit inclure AND "+ ContactsContract.Data.MIMETYPE +" =? ou il n'obtient pas la bonne rangée et me donne des données incorrectes. –

2
private String getWebsite(String contactId) 
{ 
    String[] cols = { ContactsContract.CommonDataKinds.Website.URL }; 
    String filter = ContactsContract.Data.CONTACT_ID+" = ? " + 
        " and "+ContactsContract.Data.MIMETYPE 
          +" = '"+ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE+"'"; 
    String[] params = { String.valueOf(contactId) }; 
    Cursor website = act.managedQuery(ContactsContract.Data.CONTENT_URI, cols, filter, params, null); 

    while (website.moveToNext()) { 
     String val = website.getString(website.getColumnIndex(ContactsContract.CommonDataKinds.Website.URL)); 
     if (!StringUtils.isEmpty(val)) { 
      return val; 
     } 
    } 
    return null; 
} 

// abb2yb: enlightenmentnow

3

Impossible de trouver la solution complète comment obtenir la première, dernière, prénom et date de naissance d'une personne cueillis Contacts. Alors, voici ma solution:

Afficher une liste de contacts:

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
startActivityForResult(intent, GET_PHONE_ADDRESS_BOOK_CONST); 

Ramassez un contact:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (resultCode == Activity.RESULT_OK) { 
     switch (requestCode) { 

     case GET_PHONE_ADDRESS_BOOK_CONST: 
      getContactFromAddressBook(data); 
      break; 


     default: 
      break; 
     } 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

id de Get Contact:

private void getContactFromAddressBook(Intent data) { 

    if (data != null) { 
     Uri uri = data.getData(); 
     if (uri != null) { 
      Cursor c = null; 
      try {    
       c = getActivity().getContentResolver().query(uri, 
         null, null, null, null); 

       if (c != null && c.moveToFirst()) { 
        String id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID)); 
        getFullName(id); 
        getBirthday(id); 
       } 
      } 
      catch(Exception e) { 
       Utils.Loge(e.getMessage(), e); 
      } 
      finally { 
       if (c != null) { 
        c.close(); 
       } 
      } 
     } 
    } 
} 

Obtenez d'abord, les noms et ses prénoms

private HashMap<String, String> getFullName(String id) 
{ 
    HashMap<String, String> ret = new HashMap<String, String>(); 

    String whereName = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
    String[] whereNameParams = new String[] { id, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE }; 
    Cursor c = null; 
    try { 
     c = getActivity().getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, whereName, whereNameParams, null); 
     if (c != null && c.moveToFirst()) { 
      int indexGivenName = c.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME); 
      int indexFamilyName = c.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME); 
      int indexDisplayName = c.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME);  

      ret.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, c.getString(indexGivenName)); 
      ret.put(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, c.getString(indexFamilyName)); 
      ret.put(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME, c.getString(indexDisplayName)); 
     } 
    } 
    catch(Exception e) { 
     Utils.Loge(e.getMessage(), e); 
    } 
    finally { 
     if (c != null) { 
      c.close(); 
     } 
    } 
    return ret; 
} 

Get anniversaire

private Date getBirthday(String id) 
{ 
    Date date = null; 

    String whereName = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ? AND " + ContactsContract.CommonDataKinds.Event.TYPE + " = ?"; 
    String[] whereNameParams = new String[] { id, ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE, String.valueOf(ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY) }; 
    Cursor c = null; 
    try { 
     c = getActivity().getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, whereName, whereNameParams, null); 
     if (c != null && c.moveToFirst()) { 
      int indexBirthday = c.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Event.START_DATE); 
      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.US); 
      date = format.parse(c.getString(indexBirthday)); 
     } 
    } 
    catch(Exception e) { 
     Utils.Loge(e.getMessage(), e); 
    } 
    finally { 
     if (c != null) { 
      c.close(); 
     } 
    } 
    return date; 
}