0

Android Contact API 使用中の問題

EditText の横に Button が配置されます。ユーザーが 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 つの email 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));

                }

1 つの連絡先に対して複数のメールが存在する場合に現在直面している問題。

A 、 B 、 C の 3 つの連絡先があるとします。

現在、連絡先名: A には次の電子メールがあります:

a@a.com b@b.com c@c.com

連絡先名 : B には次のメールがあります:

b@b.com c@c.com

連絡先 A のみを追加すると、b@b.com が contactEmail に 2 回追加されます。上記のコードは、すべての連絡先で 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 に答える