Sna*_*gon 5 android android-contacts
我有这个代码来获取联系人的名字和姓氏:
uri = ContactsContract.Data.CONTENT_URI;
Cursor curName = getContentResolver().query(uri, null, ContactsContract.Data.CONTACT_ID +" = "+ contactId, null, null);
if (curName.getCount() > 0){
curName.moveToFirst();
String nameGiven = curName.getString(curName.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME));
String nameFamily = curName.getString(curName.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME));
log += nameGiven + ", " + nameFamily + ": ";
}
Run Code Online (Sandbox Code Playgroud)
我只有一个联系人,所以我不需要循环.在2.3.5设备上它工作正常,返回正确的名称.但是在4.0.4设备上,它会为两个字段返回null,但是如果请求显示名称,它会正确地提供它.
可能是什么问题呢?
那么,数据表中的_ID和联系人表中的_ID是两个不同的东西。所以查询数据表时应该使用raw_contacts_id而不是_id 。
让我快速插入一段代码来帮助您入门
// 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, E.g
String nameGiven = contacts.getString(contacts.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME));
String nameFamily = contacts.getString(contacts.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME));
//log += nameGiven + ", " + nameFamily + ": ";
}
contacts.close();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1091 次 |
| 最近记录: |