使用Android联系人API时出现问题
使用Android联系人API时出现问题 编辑文本旁边有一个按钮。当用户单击按钮时,将使用以下代码调用Contact API:使用Android联系人API时出现问题,android,android-intent,android-contacts,Android,Android Intent,Android Contacts,使用Android联系人API时出现问题 编辑文本旁边有一个按钮。当用户单击按钮时,将使用以下代码调用Contact API: Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent, Constants.PICK_CONTACT); 上述代码将调用以下方法: @Override public void onA
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,
b@b.com在contactEmail上添加了两次。
在我看来,上面的代码似乎在搜索b@b.com在所有联系人上
因此,返回的最后一封电子邮件是:a@a.com , b@b.com , c@c.com , b@b.com
查找上述代码错误的任何建议/提示。检查外部循环的次数:
while (cursor.moveToNext()) {
正在为联系人A执行。对于该循环的每次迭代,按如下方式打印contactId和contactEmail:
Log.d("debug for stack overflow", contactEmail + " : " + contactId);
这将有助于确定发生了什么
如果您在此之后还需要更多帮助,请发布我刚才建议的结果。我认为第一步是确定您是否在游标查询中收到了所有4封电子邮件。它将帮助您确定字符串构建循环或游标查询是否存在问题。您可以使用
DatabaseUtils.dumpCursor(Cursor Cursor)
吐出查询电子邮件地址返回的整个游标。