【发布时间】:2012-09-28 07:18:02
【问题描述】:
用户从他们的联系人中选择一个联系人,这是回调函数(我跳过了onActivityResult(...) 代码,它工作正常):
private User addUserFromContactData(Intent data) {
Uri contactData = data.getData();
// Cursor loader to query contact information
CursorLoader cl = new CursorLoader(this);
String[] projection = { ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Email.DATA };
cl.setProjection(projection);
cl.setUri(ContactsContract.CommonDataKinds.Email.CONTENT_URI);
cl.setSelection(ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?");
cl.setSelectionArgs(new String[] { contactData.getLastPathSegment() });
// Execute query and get results from cursor
Cursor c = cl.loadInBackground();
final int nameIndex = c.getColumnIndex(projection[0]);
final int emailIndex = c.getColumnIndex(projection[1]);
User user = null;
if (c.moveToFirst()) {
user = new User();
user.setName(c.getString(nameIndex));
user.setEmail(c.getString(emailIndex));
}
c.close();
return user;
}
此方法适用于具有电子邮件地址的联系人。但是当我选择一个没有它的联系人时,找不到任何结果。电子邮件对我来说是可选的,所以如果没有电子邮件,我只会使用联系人姓名。好像我只选择带有电子邮件地址的联系人。
谁能帮帮我?也许我需要查询两次,第一次获取姓名,第二次获取可选电子邮件?
谢谢大家。
【问题讨论】:
-
如果您知道您的联系人没有电子邮件,那么您不应该使用基于该电子邮件字段的
where子句。我对联系人 API 的工作并不多,但是您不能使用ContactsContract.Contacts.CONTENT_URI来查询联系人并检索CONTACT_ID是由PICK产生的那个吗?然后,您可以检索该特定联系人的所有信息,包括电子邮件字段。 -
嗯,我尝试只更改
WHERE子句,但没有修改Uri。相应地改变Uri是有意义的。我稍后会试试这个。谢谢@Luksprog! :) -
尝试在这里使用我的答案:stackoverflow.com/a/18401101/1735499希望这会有所帮助:)