Cannot retrieve email from Contacts

前端 未结 3 1060
天涯浪人
天涯浪人 2020-12-12 03:23

I want to retrieve email,phone number and contact names from my phone-book and display them in list-view.

The name and numbers are coming perfectly but the e

相关标签:
3条回答
  • 2020-12-12 04:12

    Try this way,hope this will help you to solve your problem.

        public ArrayList<HashMap<String,String>> getAllContacts(ContentResolver cr) {
            ArrayList<HashMap<String,String>> contactList = new ArrayList<HashMap<String, String>>();
            Cursor phones = cr.query(Phone.CONTENT_URI, null,null,null, Phone.DISPLAY_NAME+ " ASC");
    
            while (phones.moveToNext())
            {
                HashMap<String,String> row = new HashMap<String, String>();
                String id = phones.getString(phones.getColumnIndex(ContactsContract.Contacts._ID));
                String name=phones.getString(phones.getColumnIndex(Phone.DISPLAY_NAME));
                String phoneNumber = phones.getString(phones.getColumnIndex(Phone.NUMBER));
                System.out.println("name.................."+name+"........number......."+phoneNumber);
    
                row.put("Name",name);
                row.put("PhoneNo",phoneNumber);
                row.put("Email",getEmail(cr,id));
                contactList.add(row);
            }
    
    
            phones.close();
            return contactList;
        }
    
        private static String getEmail(ContentResolver cr,String contactId) {
            String emailStr = "";
            final String[] projection = new String[]{Email.DATA, Email.TYPE};
    
            final Cursor email = cr.query(Email.CONTENT_URI, projection, ContactsContract.Data.CONTACT_ID + "=?",
                    new String[]{contactId}, null);
    
            if (email.moveToFirst()) {
                final int contactEmailColumnIndex = email.getColumnIndex(Email.DATA);
    
                while (!email.isAfterLast()) {
                    emailStr = emailStr + email.getString(contactEmailColumnIndex) + ";";
                    email.moveToNext();
                }
            }
            email.close();
            return emailStr;
        }
    
    Note : add this <uses-permission android:name="android.permission.READ_CONTACTS"/> in AndroidManifest.xml
    
    0 讨论(0)
  • 2020-12-12 04:20

    Try this code:

    public  void getAllContacts(ContentResolver cr) {
        String email="";
        // Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, Phone.DISPLAY_NAME + " ASC");
        Cursor phones = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, Phone.DISPLAY_NAME + " ASC");
        //email = new String[phones.getCount()];
    
         while (phones.moveToNext()){
            String id = phones.getString(phones.getColumnIndex(ContactsContract.Contacts._ID));
            String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            System.out.println("name.................."+name+"........number......."+phoneNumber); 
    
            name1.add(name);
            phno1.add(phoneNumber);
    
            Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null
            , ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?"
            , new String[]{id}, null);
            if(emailCur!=null){
                emailCur.moveToFirst();
            }
    
            // emailCur.moveToFirst();
            while (emailCur.moveToNext()) { 
                email = emailCur.getString( emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                System.out.println(email);
            } 
            email1.add(email); 
            emailCur.close();
        }
        phones.close();
    }
    
    0 讨论(0)
  • 2020-12-12 04:22

    I had the same problem. I solved it by changing kgandroid's code

    String id = phones.getString(phones.getColumnIndex(ContactsContract.Contacts._ID));
    

    to

    String id = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
    

    (Note that ContactsContract.CommonDataKinds.Phone.CONTACT_ID = "contact_id" while ContactsContract.Contacts._ID = "_id")

    0 讨论(0)
提交回复
热议问题