frost
frost

Reputation: 520

I am unable to get the EMAIL_ID column in my code instead it gets the contact number in the emailid column

I am posting my code here. Please help me to get the email address of the contact. Also I am getting a random list; please help me to sort the data as well.

package com.example.webwerks.retrievingcontactsdemo;

import android.app.Activity;
import android.app.ListActivity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.RelativeLayout;

import java.util.ArrayList;


public class MyActivity extends Activity {
  private String name;
  private String Number;
  private String alternateNumber;
  private String email_id;
  RelativeLayout relativeLayout;
  ListView listView;
  ArrayList <String> arrayList = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);
    listView = (ListView)findViewById(android.R.id.list);
    getInformation(this.getContentResolver());
 //   relativeLayout = (RelativeLayout)findViewById(R.id.layoutRelative);


}
public void getInformation(ContentResolver contentResolver){
    Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);
    while (phones.moveToNext()){
        name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        Number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

        email_id = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
        arrayList.add(name);
        arrayList.add(Number);
        arrayList.add(email_id);
    }
    phones.close();
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arrayList);
    listView.setAdapter(adapter);


}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.my, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}
}

This is my code. It gives me the contact name and contact number(primary) and email id column. Also, it shows me the contact number only. And the data is not sorted according to my phone contact list. Please help. Thanks in advance :)

Upvotes: 2

Views: 178

Answers (2)

SweetWisher ツ
SweetWisher ツ

Reputation: 7306

You need to execute another query using the id to get Email details of tat contact. SO check this code

Better to go with DataModel class:

public class ContactData
{
    public String name;
    public String email;
}


ArrayList<ContactData> data = new ArrayList<>(); 
  public void getInformation(ContentResolver contentResolver){
            Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);


        while (phones.moveToNext()){
            String id = phones.getString(phones.getColumnIndex(ContactsContract.Contacts._ID));
            Cursor cur1 = contentResolver.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(email!=null){
                    Toast.makeText(this,
                            "Name : "+ name+" EMail  : "+email, 1000)
                            .show();
                }
            } 
            dataList.add(contactData);
            cur1.close();


        }
        phones.close();




    }

Upvotes: 2

Neetu Shrivastava
Neetu Shrivastava

Reputation: 229

 cursor = context.getContentResolver().query(
            ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
 cursor.moveToFirst();

 for (int i = 0; i < cursor.getCount(); i++) {

   contact = getContact(cursor, context.getContentResolver());
   cursor.moveToNext();
  }

  private Contact getContact(Cursor cur , ContentResolver cr){
    String contactID = cur.getString(cur
            .getColumnIndex(ContactsContract.Contacts._ID));
  if (contactID != null) 
 {

     // for reading all contact
        Cursor pCur = cr.query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                new String[]{contactID}, null);
        while (pCur.moveToNext()) {

            String contactNumber = pCur
                    .getString(pCur
                              .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            String contact_Number_Type = pCur
                    .getString(pCur
                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));

            contact.setContact_Number(contactNumber);
            contact.setContact_Number_Type(contact_Number_Type);

        }
        pCur.close();

        // for reading all email id

        Cursor emailCur = cr.query(
                ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
                new String[]{contactID}, null);
        while (emailCur.moveToNext()) {

            String emailContact = emailCur
                    .getString(emailCur
                        .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
            String emailType = emailCur
                    .getString(emailCur
                        .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));

            contact.setContact_Email(emailContact);
            contact.setContact_Email_Type(emailType);
        }

        emailCur.close();
}

}

Here Contact is a bean class

Upvotes: 0

Related Questions