【问题标题】:How to get email id, name and number from contact list如何从联系人列表中获取电子邮件 ID、姓名和号码
【发布时间】:2018-11-15 17:27:50
【问题描述】:

我正在尝试从联系人列表中获取姓名、联系人编号和电子邮件 ID,并将其存储在数组列表中并转发到服务器。我将姓名、电话和电子邮件 ID 存储到 contactNameArrayList、contactNumberArrayList 和 contactEmailIdArrayList。

下面的代码我得到了姓名、电子邮件和联系人号码,但是如何将特定的电子邮件 ID 存储到特定的联系人号码?

private void getAllContacts() {
    ContentResolver contactResolver = context.getContentResolver();

    Cursor cursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);

    if(cursor.getCount()>0)    
        while ( cursor.moveToNext()) {
            String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));               
            Log.e("TAG",  " Name: " + displayName+"==>phone Number==>"+number);
            contactNameArrayList.add(displayName);
            contactNumberArrayList.add(number);
            final String[] projection = new String[]{ContactsContract.CommonDataKinds.Email.DATA,
            ContactsContract.CommonDataKinds.Email.TYPE};            
            Cursor emailCursor = contactResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,null, null, null);

            while (emailCursor.moveToNext())   {
                String email = emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                int type = emailCursor.getInt(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
                String s = (String) ContactsContract.CommonDataKinds.Email.getTypeLabel(context.getResources(), type, "");
                Log.e(TAG,"EMAIL==>"+email);
            }

            emailCursor.close();
        }

        cursor.close();

        Log.e(TAG,"contactNameArrayList sIZE==>"+contactNameArrayList.size()+"contactNumberArrayList size==>"+contactNumberArrayList.size()+"contactEmailAddressArrayList size==>"+contactEmailAddressArrayList.size());    
    }

上面的代码我调用getAllcontact 方法。我得到了号码、姓名和电子邮件 ID,并存储在 contactNameArrayList 和 contactNumberArrayList 和 contactEmailAddressList 中。但是当我收到电子邮件 id 时,回复是这样的:

姓名:efg==>电话号码==>(256) 655-555
EMAIL==>abc@gmail.com
EMAIL==>pqr@gmail.com
EMAIL==>xyz@gmail.com
姓名:abc==>电话号码==>(256) 655-555
EMAIL==>abc@gmail.com
EMAIL==>pqr@gmail.com
EMAIL==>xyz@gmail.com
姓名:pqr==>电话号码==>(987) 456-1238
EMAIL==>abc@gmail.com
EMAIL==>pqr@gmail.com
EMAIL==>xyz@gmail.com
姓名:xyz==>电话号码==>(987) 456-1238
EMAIL==>abc@gmail.com
EMAIL==>pqr@gmail.com
EMAIL==>xyz@gmail.com

那么如何获取特定手机的电子邮件 ID 并将其存储在 contactEmailArrayList 中。根据上述回复conatactNameArrayList 和contactNumberArrayList 大小相同但ContactEmailAddressArrayList 大小不同。所以请给我建议。

【问题讨论】:

    标签: java android android-studio android-contacts android-cursor


    【解决方案1】:

    为获取电子邮件、姓名、号码等设置一门课程。

    public class UserContact {
    private String userName,userEmail;
    private boolean isSelect;
    
    public boolean isSelect() {
        return isSelect;
    }
    
    public void setSelect(boolean select) {
        isSelect = select;
    }
    
    public UserContact(){}
    public UserContact(String userName, String userEmail) {
        this.userName = userName;
        this.userEmail = userEmail;
    }
    
    public String getUserName() {
        return userName;
    }
    
    public void setUserName(String userName) {
        this.userName = userName;
    }
    
    public String getUserEmail() {
        return userEmail;
    }
    
    public void setUserEmail(String userEmail) {
        this.userEmail = userEmail;
    }
    

    }

    然后在主要活动中列出一个作为全局级别的列表。

        private List<UserContact> mContactList = new ArrayList<>();
    

    然后调用 getContact details。

     /**
     * this method read device in contact name and email.
     */
    public void getContact() {
        if (PermissionManager.checkPermission(getActivity(), READ_CONTACT)) {
            mContactList.clear();
            List<UserContact> contactList = new ArrayList<>();
            Cursor cur = getActivity().getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
            if (cur.getCount() > 0) {
                while (cur.moveToNext()) {
                    String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                    Cursor cur1 = getActivity().getContentResolver().query(
                            ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                            ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
                            new String[]{id}, null);
                    while (cur1.moveToNext()) {
                        //to get the contact names
                        String name = cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                        Log.e("Name :", name);
                        String email = cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                        Log.e("Email", email);
                        if (!TextUtils.isEmpty(email)) {
                            contactList.add(new UserContact(name, email));
                        }
                    }
                    cur1.close();
                }
            }
            mContactList = contactList;
            setAdapter();
        } else {
            PermissionManager.askForPermission(READ_CONTACT, getActivity());
        }
    }
    

    上述方法只获取姓名和电子邮件,您可以修改您的需求并添加电话号码代码。

    【讨论】:

    • 字符串编号 = cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));试试,但我的电子邮件 ID 是数字
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    相关资源
    最近更新 更多