在查询联系人数据时,我得到了大部分工作.我正在与StructuredName和Organization战斗.他们不适合我.
如果您不介意,请查看代码.它是手工制作的,并且删除了大量错误检查,以使其尽可能小地发布在此处. “不工作”的评论是对我不起作用的部分.
两个前导if()是onActivityResult的一部分,我在联系人选择结束时收到数据.通过以下方式拨打电话:
intent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent,Main.DIALOG_PICKCONTACT);
提前谢谢了
HJW
if (requestCode == Main.DIALOG_PICKCONTACT) { if (resultCode == RESULT_OK) { int i; String s; Cursor cursorContacts = managedQuery(intent.getData(),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,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,ContactsContract.CommonDataKinds.Organization.CONTACT_ID + " = ?",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,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",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,ContactsContract.CommonDataKinds.StructuredName.CONTACT_ID + " = ?",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,ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID + " = ?",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,ContactsContract.CommonDataKinds.Website.CONTACT_ID + " = ?",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(); } } }
解决方法
你的情况是错的.
用于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();