如何获得接触的第一个名字,姓氏,针对Android单个查询电子邮件ID [英] how to get contacts the first name , last name, email id from single query in android

查看:103
本文介绍了如何获得接触的第一个名字,姓氏,针对Android单个查询电子邮件ID的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想取名字,姓氏,从单一的查询电子邮件ID Android的联系人的详细信息。如果我通过获取以下过程的联系人。它正在采取很多时间获取和筛选。请给解决了这个解决方案。 presently我这样做这种方式。请看下面的到code。

 公共静态JSONArray getMABTosendServer(上下文的背景下,用户的UserBean,
        DatabaseUserManager的UserManager)抛出JSONException {
    hashedEmails =新的HashMap<弦乐,AddressBean>();
    JSONArray jsonArray =新JSONArray();
    HashMap的<字符串,字符串> emailValues​​ =新的HashMap<字符串,字符串>();    StringBuffer的SB =新的StringBuffer();
    sb.append(......联系方式......);
    ContentResolver的CR = context.getContentResolver();
    光标CUR = cr.query(ContactsContract.Contacts.CONTENT_URI,空,
            NULL,NULL,NULL);
    串emailContact =;
    串EMAILTYPE =;
    光标nameCursor = NULL;
    串的firstName =;
    字符串的lastName =;
    字符串ID = NULL;
    长userLastContactId = 0;
    INT I = 0;
    如果(cur.getCount()大于0){
        而(cur.moveToNext()){
            我++;            ID = cur.getString(CUR
                    .getColumnIndex(ContactsContract.Contacts._ID));
            如果(用户= NULL和放大器;!&安培; user.getLastContactId()== NULL){
                userLastContactId = 0;
            }其他{
                userLastContactId =的Long.parseLong(user.getLastContactId());
            }
            如果(的Long.parseLong(ID)> userLastContactId){
                乌里contactUri = ContentUris.withAppendedId(
                        Contacts.CONTENT_URI,的Long.parseLong(ID));
                乌里dataUri = Uri.withAppendedPath(contactUri,
                        Contacts.Data.CONTENT_DIRECTORY);
                nameCursor = context.getContentResolver()查询(dataUri,
                        空,Data.MIMETYPE +=?,
                        新的String [] {} StructuredName.CONTENT_ITEM_TYPE,
                        空值);
                而(nameCursor.moveToNext()){
                    的firstName = nameCursor.getString(nameCursor
                            .getColumnIndex(Data.DATA2));
                    的lastName = nameCursor.getString(nameCursor
                            .getColumnIndex(Data.DATA3));
                    光标emailCur = CR
                            .query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                                    空值,
                                    ContactsContract.CommonDataKinds.Email.CONTACT_ID
                                            +=?,新的String [] {ID},
                                    空值);
                    而(emailCur.moveToNext()){
                        emailContact = emailCur
                                .getString(emailCur
                                        .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                        EMAILTYPE = emailCur
                                .getString(emailCur
                                        .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
                        sb.append(\\ nEmail:+ emailContact +电子邮件类型:
                                + EMAILTYPE);
                        如果(EMAIL_ADDRESS_PATTERN.matcher(
                                emailContact.trim())。匹配()
                                &功放;&安培; !emailValues​​.containsKey(emailContact)){
                            emailValues
                                    。把(emailContact,将String.valueOf(i)段);
                            的JSONObject的JSONObject =新的JSONObject();
                            AddressBean AB =新AddressBean();                            如果(名字== NULL){
                                的firstName =;
                            }
                            如果(lastName的== NULL){
                                的lastName =;
                            }
                            ab.setFirstName(名字);
                            ab.setLastName(lastName的);
                            ab.setEmailId(emailContact);
                            jsonObject.put(名字,名字);
                            jsonObject.put(姓氏,姓氏);
                            jsonObject.put(电子邮件,加密
                                    .encryptUsingSha1(emailContact
                                            。.toLowerCase()修剪()));
                            hashedEmails.put(加密
                                    .encryptUsingSha1(emailContact),AB);
                            jsonArray.put(JSONObject的);
                        }                    }
                    emailCur.close();
                }
                nameCursor.close();
            }
        }
        cur.close();
        user.setLastContactId(ID);
        userManager.updateUser(用户);
    }
    返回jsonArray;
}


解决方案

 公共类ReadContacts扩展的AsyncTask<太虚,太虚,太虚> {    私人的ListView contactsList;    私人语境CNTX;
    私人恒定常数;    静态最后的String [] = CONTACTS_SUMMARY_PROJECTION新的String [] {
        Contacts._ID,// 0
        Contacts.DISPLAY_NAME,// 1
        Contacts.STARRED,// 2
        Contacts.TIMES_CONTACTED,// 3
        Contacts.CONTACT_ preSENCE,// 4
        Contacts.PHOTO_ID,// 5
        Contacts.LOOKUP_KEY,// 6
        Contacts.HAS_PHONE_NUMBER,// 7
    };    私人长期的ContactID;
    私人字符串DISPLAY_NAME;
    私人字符串phoneNumber的;    私人的ArrayList< ContactsWrapper> contactWrap =新的ArrayList< ContactsWrapper>();
    私人的HashMap<长,ArrayList的< ContactsWrapper>>地图=新的HashMap<长,ArrayList的< ContactsWrapper>>();    私人ContactsAdapter适配器;    私人DataController类控制器;    公共ReadContacts(上下文CNTX,ListView控件contactList){
        // TODO自动生成构造函数存根
        this.cntx = CNTX;
        常量=新常数();
        this.contactsList = contactList;        控制器= DataController.getInstance();
    }    @覆盖
    在preExecute保护无效(){
        // TODO自动生成方法存根
        super.on preExecute();
        如果(!(controller.contactWrapper.size()&0))
             constants.displayProgressDialog(CNTX加载通讯录...,请等待);
    }    @覆盖
    保护无效doInBackground(虚空...... PARAMS){
        // TODO自动生成方法存根        如果(!(controller.contactWrapper.size()&0))
        {
        尝试{
            串选择=((+ Contacts.DISPLAY_NAME +NOTNULL)AND(
                    + Contacts.HAS_PHONE_NUMBER += 1)AND(
                    + Contacts.DISPLAY_NAME +=''))!;            光标C = cntx.getContentResolver()查询(Contacts.CONTENT_URI,CONTACTS_SUMMARY_PROJECTION,选择,
                    空,Contacts.DISPLAY_NAME +分页中局部ASC);            的for(int i = 0; I< c.getCount();我++)
            {
// contactWrap.clear();
                尝试{
                    的ContactID = 0;
                    串hasPhone =;
                    DISPLAY_NAME =;
                    phoneNumber的=;                    c.moveToPosition(ⅰ);                    的ContactID = c.getLong(0);
                    DISPLAY_NAME = c.getString(1);
                    hasPhone = c.getString(7);                    如果(hasPhone.equalsIgnoreCase(1))
                        hasPhone =真;
                    其他
                        hasPhone =假;                    如果(Boolean.parseBoolean(hasPhone))
                    {
                        。光标手机= cntx.getContentResolver()查询(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,空,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +=+的ContactID,NULL,NULL);
                        而(phones.moveToNext())
                        {
                            INT indexPhoneType = phones.getColumnIndexOrThrow(Phone.TYPE);
                            字符串PHONETYPE = phones.getString(indexPhoneType);                            phoneNumber的= phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));                            串lookupKey = phones.getString(phones.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));                            contactWrap.add(新ContactsWrapper(的ContactID,DISPLAY_NAME,phoneNumber的,lookupKey,FALSE));
                        }
// map.put(的ContactID,新的ArrayList< ContactsWrapper>(contactWrap));
                        phones.close();
                    }
                }赶上(例外五){                    e.printStackTrace();
                }
            }
            controller.contactWrapper = contactWrap;
        }
        赶上(例外五){
            // TODO:处理异常
            e.printStackTrace();
        }
        }        返回null;
    }    @覆盖
    保护无效onPostExecute(虚空结果){
        // TODO自动生成方法存根
        super.onPostExecute(结果);
        constants.dismissDialog();        适配器=新ContactsAdapter(CNTX);
        contactsList.setAdapter(适配器);
    }}

i want to fetch android contacts details of firstname , lastname, email id from single query. if i fetch the contacts by below process. it is taking lot of time fetching and filtering. Please give the solution to solve this. Presently i am doing in this way . please look into below code.

public static JSONArray getMABTosendServer(Context context, UserBean user,
        DatabaseUserManager userManager) throws JSONException {
    hashedEmails = new HashMap<String, AddressBean>();
    JSONArray jsonArray = new JSONArray();
    HashMap<String, String> emailValues = new HashMap<String, String>();

    StringBuffer sb = new StringBuffer();
    sb.append("......Contact Details.....");
    ContentResolver cr = context.getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
            null, null, null);
    String emailContact = "";
    String emailType = "";
    Cursor nameCursor = null;
    String firstName = "";
    String lastName = "";
    String id = null;
    long userLastContactId = 0;
    int i = 0;
    if (cur.getCount() > 0) {
        while (cur.moveToNext()) {
            i++;

            id = cur.getString(cur
                    .getColumnIndex(ContactsContract.Contacts._ID));
            if (user != null && user.getLastContactId() == null) {
                userLastContactId = 0;
            } else {
                userLastContactId = Long.parseLong(user.getLastContactId());
            }
            if (Long.parseLong(id) > userLastContactId) {
                Uri contactUri = ContentUris.withAppendedId(
                        Contacts.CONTENT_URI, Long.parseLong(id));
                Uri dataUri = Uri.withAppendedPath(contactUri,
                        Contacts.Data.CONTENT_DIRECTORY);
                nameCursor = context.getContentResolver().query(dataUri,
                        null, Data.MIMETYPE + "=?",
                        new String[] { StructuredName.CONTENT_ITEM_TYPE },
                        null);
                while (nameCursor.moveToNext()) {
                    firstName = nameCursor.getString(nameCursor
                            .getColumnIndex(Data.DATA2));
                    lastName = nameCursor.getString(nameCursor
                            .getColumnIndex(Data.DATA3));
                    Cursor emailCur = cr
                            .query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                                    null,
                                    ContactsContract.CommonDataKinds.Email.CONTACT_ID
                                            + " = ?", new String[] { id },
                                    null);
                    while (emailCur.moveToNext()) {
                        emailContact = emailCur
                                .getString(emailCur
                                        .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                        emailType = emailCur
                                .getString(emailCur
                                        .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
                        sb.append("\nEmail:" + emailContact + "Email type:"
                                + emailType);
                        if (EMAIL_ADDRESS_PATTERN.matcher(
                                emailContact.trim()).matches()
                                && !emailValues.containsKey(emailContact)) {
                            emailValues
                                    .put(emailContact, String.valueOf(i));
                            JSONObject jsonObject = new JSONObject();
                            AddressBean ab = new AddressBean();

                            if (firstName == null) {
                                firstName = "";
                            }
                            if (lastName == null) {
                                lastName = "";
                            }
                            ab.setFirstName(firstName);
                            ab.setLastName(lastName);
                            ab.setEmailId(emailContact);
                            jsonObject.put("firstName", firstName);
                            jsonObject.put("lastName", lastName);
                            jsonObject.put("email", Encryption
                                    .encryptUsingSha1(emailContact
                                            .toLowerCase().trim()));
                            hashedEmails.put(Encryption
                                    .encryptUsingSha1(emailContact), ab);
                            jsonArray.put(jsonObject);
                        }

                    }
                    emailCur.close();
                }
                nameCursor.close();
            }
        }
        cur.close();
        user.setLastContactId(id);
        userManager.updateUser(user);
    }
    return jsonArray;
}

解决方案

public class ReadContacts extends AsyncTask<Void, Void, Void>{

    private ListView contactsList;

    private Context cntx;
    private Constant constants;

    static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
        Contacts._ID, // 0
        Contacts.DISPLAY_NAME, // 1
        Contacts.STARRED, // 2
        Contacts.TIMES_CONTACTED, // 3
        Contacts.CONTACT_PRESENCE, // 4
        Contacts.PHOTO_ID, // 5
        Contacts.LOOKUP_KEY, // 6
        Contacts.HAS_PHONE_NUMBER, // 7
    };

    private long contactId;
    private String display_name;
    private String phoneNumber;

    private ArrayList<ContactsWrapper>contactWrap = new ArrayList<ContactsWrapper>();
    private HashMap<Long, ArrayList<ContactsWrapper>>map = new HashMap<Long, ArrayList<ContactsWrapper>>();

    private ContactsAdapter adapter;

    private DataController controller;

    public ReadContacts(Context cntx, ListView contactList) {
        // TODO Auto-generated constructor stub
        this.cntx = cntx;
        constants = new Constant();
        this.contactsList = contactList;

        controller = DataController.getInstance(); 
    }

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        if(!(controller.contactWrapper.size()>0))
             constants.displayProgressDialog(cntx, "Loading Contacts...", "Please Wait");
    }

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub

        if(!(controller.contactWrapper.size()>0))
        {
        try {
            String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("
                    + Contacts.HAS_PHONE_NUMBER + "=1) AND ("
                    + Contacts.DISPLAY_NAME + " != '' ))";

            Cursor c = cntx.getContentResolver().query(Contacts.CONTENT_URI, CONTACTS_SUMMARY_PROJECTION, select,
                    null, Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");

            for(int i=0;i<c.getCount();i++)
            {
//              contactWrap.clear();
                try {
                    contactId = 0;
                    String hasPhone = "";
                    display_name = "";
                    phoneNumber = "";

                    c.moveToPosition(i);

                    contactId =  c.getLong(0);
                    display_name = c.getString(1);
                    hasPhone = c.getString(7);

                    if (hasPhone.equalsIgnoreCase("1"))
                        hasPhone = "true";
                    else
                        hasPhone = "false" ;

                    if (Boolean.parseBoolean(hasPhone)) 
                    {
                        Cursor phones = cntx.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);
                        while (phones.moveToNext()) 
                        {
                            int indexPhoneType = phones.getColumnIndexOrThrow(Phone.TYPE);
                            String phoneType =  phones.getString(indexPhoneType);

                            phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

                            String lookupKey = phones.getString(phones.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));

                            contactWrap.add(new ContactsWrapper(contactId, display_name, phoneNumber,lookupKey,false));
                        }
//                      map.put(contactId, new ArrayList<ContactsWrapper>(contactWrap));
                        phones.close();
                    }
                } catch (Exception e) {

                    e.printStackTrace();
                }  
            }
            controller.contactWrapper = contactWrap;
        }
        catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        }

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        constants.dismissDialog();

        adapter = new ContactsAdapter(cntx);
        contactsList.setAdapter(adapter);
    }

}

这篇关于如何获得接触的第一个名字,姓氏,针对Android单个查询电子邮件ID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆