0

使用 Android Contact API 时出现问题

Button 放置在 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,则 b@b.com 将在 contactEmail 上添加两次。在我看来,上面的代码似乎在所有联系人上搜索 b@b.com。

因此,最终返回的电子邮件是:a@a.com、b@b.com、c@c.com、b@b.com

在上述代码中查找错误的任何建议/提示。

4

1 回答 1

0

检查外循环的次数:

while (cursor.moveToNext()) {

正在为联系人 A 执行。对于该循环的每次迭代,打印出 contactId 和 contactEmail,如下所示:

Log.d("debug for stack overflow", contactEmail + " : " + contactId);

这将有助于确定正在发生的事情。

如果在此之后您仍然需要更多帮助,请发布我刚才建议的结果。

于 2012-05-14T16:07:20.083 回答