使用Android Contact API时出现问题

时间:2012-05-14 14:25:18

标签: android android-intent android-contacts

使用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

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

1 个答案:

答案 0 :(得分:0)

检查外环的次数:

while (cursor.moveToNext()) {

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

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

这将有助于确定发生了什么。

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