使用Android Contact API时出现问题
按钮放在EditText旁边。当用户单击Button时,将使用以下代码调用Contact API:
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, Constants.PICK_CONTACT);
上面的代码将调用以下方法:
@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
if (reqCode == Constants.PICK_CONTACT) {
if (resultCode == Activity.RESULT_OK) {
String contactStr = getContactInfo(data);
mEditTxtTo.setText(contactStr);
}
}
}
protected String getContactInfo(Intent intent) {
String contactEmail = "";
Cursor cursor = managedQuery(intent.getData(), null, null, null, null);
while (cursor.moveToNext()) {
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
// Find Email Addresses
Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null);
while (emails.moveToNext()) {
if (contactEmail.trim().length() > 0) {
contactEmail = new StringBuilder(contactEmail).append(IShipdocsMobileConstants.SEMICOLON_DELIMITER)
.append(emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA))).toString();
} else {
contactEmail = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
}
emails.close();
}
cursor.close();
return contactEmail;
}
我添加了if - else条件来处理以下问题:
假设在名为A的联系人中,有3个电子邮件ID。因此,在将第一封电子邮件添加到contactEmail之后,下一封电子邮件将在第一封电子邮件之后附加,该邮件由分号和分隔符分隔。循环一直持续到最后一个元素。
if (contactEmail.trim().length() > 0) {
contactEmail = new StringBuilder(contactEmail).append(";")
.append(emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA))).toString();
} else {
contactEmail = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
}
当一个联系人有多个电子邮件时,目前面临的问题。
假设有3个联系人,A,B& C
现在,联系人姓名:A包含以下电子邮件:
a@a.com b@b.com c@c.com
联系人姓名:B有以下电子邮件:
b@b.com c@c.com
如果只添加联系人A, 在contactEmail上添加了两次b@b.com。 在我看来,好像上面的代码在所有联系人上搜索b@b.com。
因此,退回的最终电子邮件是:a @ a.com,b @ b.com,c @ c.com,b @ b.com
有关在上述代码中查找错误的任何建议/提示。
答案 0 :(得分:0)
检查外环的次数:
while (cursor.moveToNext()) {
正在执行联系A.对于该循环的每次迭代,打印出contactId和contactEmail,如下所示:
Log.d("debug for stack overflow", contactEmail + " : " + contactId);
这将有助于确定发生了什么。
如果您在此之后仍需要更多帮助,请发布我刚刚建议的结果。