【问题标题】:I am unable to get the EMAIL_ID column in my code instead it gets the contact number in the emailid column我无法在我的代码中获取 EMAIL_ID 列,而是在 emailid 列中获取联系号码
【发布时间】:2014-12-17 03:42:39
【问题描述】:

我在这里发布我的代码。 请帮我获取联系人的电子邮件地址。 我也得到一个随机列表;请帮我对数据进行排序。

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

这是我的代码。它给了我联系人姓名和联系电话(主要)和电子邮件 ID 列。此外,它只显示我的联系电话。 而且数据不是按照我的手机通讯录排序的。 请帮忙。 在此先感谢:)

【问题讨论】:

标签: android android-contacts


【解决方案1】:

您需要使用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();




    }

【讨论】:

  • 我试过这段代码。当我调试它时,我得到了这个人的电子邮件地址。但是那个电子邮件地址不是那个联系人对应的:(如果你能正确地指导我,因为我是新手
  • 而且我没有得到完整的联系人列表。而且列表也没有排序
  • 确定不对应??因为我是完美的..去this 告诉我你的输出
  • 是的,我试过了,但这并没有给我正确的答案。它给了我随机联系的随机电子邮件地址。
  • 关注this好友
【解决方案2】:
 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类

【讨论】:

  • 豆类是什么意思?
  • 类有一些变量,每个变量都有getter setter方法
  • 您必须执行另一个查询以获取电子邮件 ID
  • 我也这样做了。但它给了我来自任何随机联系人的任何随机电子邮件,我尝试了@SweetWisher 提供的代码。下面是代码。 :(
  • 你试过我给你的代码了吗@chinmayghag
猜你喜欢
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 2013-05-19
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多