Android 无法在ICS上获取姓名和姓氏的联系人
我有获取联系人姓名和姓氏的代码:Android 无法在ICS上获取姓名和姓氏的联系人,android,android-contacts,Android,Android Contacts,我有获取联系人姓名和姓氏的代码: uri = ContactsContract.Data.CONTENT_URI; Cursor curName = getContentResolver().query(uri, null, ContactsContract.Data.CONTACT_ID +" = "+ contactId, null, null); if (curName.getCount() &
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 + ": ";
}
我只有一个联系人,所以我不需要回路。
在2.3.5设备上,它工作正常,返回正确的名称。但在4.0.4设备上,两个字段都返回null,但如果请求显示名称,则会正确提供
可能是什么问题?嗯,数据表中的ID和联系人表是两个不同的东西。那么你呢 查询数据表时应使用原始联系人id而不是\u 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();
嗨,我认为游标的查询需要修复,我通常这样使用
Cursor c = getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, ContactsContract.Data.CONTACT_ID + " = ?", new String[] {String.valueOf(contactId)}, null);
if (c.moveToFirst()){
// get your code to get content on that cursor ex: c.getString(0)
}
请看这个
希望这能对您有所帮助。您是否测试过打印所有内容?其他设备可能将数据保存在错误的位置。或者尝试使用RawContacts。不幸的是,每台设备处理联系人的方式都有很多不同。我试着打印所有的表格,所有的数据都是空的。我将尝试使用RawContacts。我已重新分配任务,但无法检查此项,我将尽快返回此任务。