Я не могу получить столбец EMAIL_ID в своем коде, вместо этого он получает контактный номер в столбце emailid

Я публикую свой код здесь. Пожалуйста, помогите мне получить адрес электронной почты контакта. Также я получаю случайный список; пожалуйста, помогите мне отсортировать данные, а также.

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);
}
}

Это мой код. Это дает мне контактное имя и контактный номер (основной) и столбец идентификатора электронной почты. Кроме того, он показывает мне только контактный номер. И данные не сортируются по списку контактов моего телефона. Пожалуйста помоги. Заранее спасибо :)


person frost    schedule 30.09.2014    source источник
comment
У вас установлен Email-ID в Контактах??   -  person SweetWisher ツ    schedule 30.09.2014
comment
Проверьте: stackoverflow.com/questions/25717989 /   -  person Haresh Chhelana    schedule 30.09.2014
comment
Вам также нужно выполнить еще один запрос для всех идентификаторов ..check ma answer   -  person SweetWisher ツ    schedule 30.09.2014


Ответы (2)


Вам нужно выполнить еще один запрос, используя id, чтобы получить Email информацию о контакте tat. ТАК проверьте этот код

Лучше использовать класс DataModel:

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();




    }
person SweetWisher ツ    schedule 30.09.2014
comment
Я пробовал этот код. Я получаю адрес электронной почты человека, когда я его отлаживал. Но этот адрес электронной почты не соответствовал этому контакту :( если вы можете направить меня правильно, поскольку я новичок - person frost; 30.09.2014
comment
А также я не получаю весь список контактов. И список тоже не отсортирован - person frost; 30.09.2014
comment
вы уверены, что это не соответствует ?? Поскольку я получаю совершенство. Перейдите с это и расскажите мне о своем выходе - person SweetWisher ツ; 30.09.2014
comment
Да, я пробовал, но это не дает мне правильного ответа. Это дает мне случайный адрес электронной почты для случайного контакта. - person frost; 30.09.2014
comment
подпишитесь на этого друга - person SweetWisher ツ; 30.09.2014
comment
Я получаю правильный адрес электронной почты для правильного человека. Возможно, что-то не так с вашим кодом :( - person SweetWisher ツ; 30.09.2014
comment
Не могли бы вы поместить отредактированный код, который я могу просто вставить в свой проект. Потому что я сделал все то же самое, но потом тоже. Как и в Number, который отсутствует в приведенном выше коде. - person frost; 30.09.2014
comment
Я только что поджарил электронное письмо ... поэтому поместите этот код ... затем, соответственно, добавьте его в массив, так как вам нужно показать его в списке. Проверьте код сейчас - person SweetWisher ツ; 30.09.2014
comment
Да, это сработало. Он дал мне номер адреса электронной почты и имя, но теперь проблема в том, что в представлении списка данные случайны, например: я получил имя какого-то человека, адрес электронной почты другого человека и номер другого человека. Тост дал мне точный результат, который я хотел, но список, конечно, не делает этого для меня. - person frost; 30.09.2014
comment
Затем правильно добавьте его в список друзей :) Создайте класс с именем номера и адресом электронной почты и добавьте данные в список массивов этого класса. - person SweetWisher ツ; 30.09.2014
comment
Да, постараюсь Большое спасибо за помощь :) Можете ли вы просто проголосовать за мой вопрос, чтобы он мог добавиться в репутацию - person frost; 30.09.2014
comment
Я отредактировал код, чтобы использовать класс Model :) рад, что это помогло вам .. :) - person SweetWisher ツ; 30.09.2014
comment
Это ArrayList в каком классе? Основная деятельность или новый созданный класс? - person frost; 30.09.2014
comment
все, что вы хотите сделать .... Вы также можете написать это в Mainactivity или создать новый класс. Лучше пойти с новым классом - person SweetWisher ツ; 30.09.2014
comment
Но почему этот код дает мне ограниченные контакты? У меня есть около 500 контактов на моем устройстве, но это дает что-то около 70-80 контактов. Почему это может быть так? - person frost; 30.09.2014
comment
Возможно, у ваших 70-80 контактов есть только идентификатор электронной почты. - person SweetWisher ツ; 30.09.2014
comment
ohk Так что я не хочу, как это. Мне нужны были все контактные данные, которые есть на моем устройстве. пример: если у контакта есть имя и номер, то он должен отображаться в списке, если у контакта есть имя и адрес электронной почты, то это должно быть сделано соответствующим образом - person frost; 30.09.2014
comment
тогда dataList.add(contactData); должен быть во внешнем цикле... соответствующим образом измените свой код. Сначала проверьте размер cur1 - person SweetWisher ツ; 30.09.2014
comment
Еще одно сомнение: я хочу редактировать и обновлять данные из приложения, и изменения также должны отражаться в исходном списке контактов на устройстве. Как я могу этого добиться? - person frost; 01.10.2014
comment
Давайте продолжим это обсуждение в чате. - person SweetWisher ツ; 01.10.2014

 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();
}

}

Здесь Contact - это класс bean-компонента

person Neetu Shrivastava    schedule 30.09.2014
comment
Что вы подразумеваете под классом бобов? - person frost; 30.09.2014
comment
Класс, который имеет некоторые переменные, и для каждой переменной есть метод установки геттера - person Neetu Shrivastava; 30.09.2014
comment
Вы должны выполнить другой запрос для получения идентификатора электронной почты. - person Neetu Shrivastava; 30.09.2014
comment
Я также сделал это. Но это дает мне любое случайное электронное письмо от любого случайного контакта, я пробовал код, который был предоставлен @SweetWisher. Ниже приведен код для этого. :( - person frost; 30.09.2014
comment
Вы пробовали код, который я вам дал @chinmayghag? - person Neetu Shrivastava; 30.09.2014
comment
Дайте мне как-нибудь, я обязательно попробую ваш код и прокомментирую его :) - person frost; 30.09.2014