java - Android 获取手机通讯录并删除重复项

标签 java android android-contacts

我遇到了与联系人相关的问题。我得到了电话联系人并将它们存储在我的列表对象中。这是它的代码

  Uri uri = ContactsContract.Data.CONTENT_URI;

    String[] projection = {
            ContactsContract.Data.CONTACT_ID,
            ContactsContract.Data.DISPLAY_NAME,
            ContactsContract.Data.PHOTO_ID,
            ContactsContract.Data.DATA1
    };

    Cursor phones = getContentResolver().query(
            uri, projection, ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "' AND " + ContactsContract.Data.DATA1 + "!=''", null, null);


    if (phones.moveToFirst()) {

        do {
            long ID =   phones.getLong(phones.getColumnIndex(projection[0]));
            String DisplayName  =   phones.getString(phones.getColumnIndex(projection[1]));
            String photoID =    phones.getString(phones.getColumnIndex(projection[2]));
            String Key =    phones.getString(phones.getColumnIndex(projection[3]));
            String photoURI = "null";

            if(Key != null && Key.toString().trim().length() > 0 && (Key.startsWith("0") || Key.startsWith("+"))){
                if (photoID != null) {
                    photoURI=String.valueOf(ID);;
                    //Console.WriteLine("*************************************> id="+ID+" uri="+photoURI.ToString());
                }
                ContactBean contactModel=new ContactBean(DisplayName,Key,photoID);

            list.add(contactModel);
            } else {
                // No number!!
            }
        } while (phones.moveToNext());
    }

我正在获取所有联系人,并根据我的要求删除了电子邮件联系人。我的问题是我正在获取所有联系人,包括重复联系人。如果我用相同的姓名和号码保存了 3 次联系人,它会获取所有三个联系人。我不想这样。有什么办法可以避免这种情况。 getContactResolver 查询中的任何内容,或者我必须删除列表中的重复项。任何解决方案或建议?

最佳答案

你可以试试这个:

        ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, ContactsContract.Contacts.DISPLAY_NAME + " ASC ");
        String lastnumber = "0";

        if (cur.getCount() > 0)
        {
            while (cur.moveToNext())
            {
                String number = null;
                String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

                if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
                {
                    Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]
                    { id }, null);
                    while (pCur.moveToNext())
                    {
                        number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        Log.e("lastnumber ", lastnumber);
                        Log.e("number", number);

                        if (number.equals(lastnumber))
                        {

                        }
                        else
                        {
                            lastnumber = number;

                            Log.e("lastnumber ", lastnumber);
                            int type = pCur.getInt(pCur.getColumnIndex(Phone.TYPE));
                            switch (type)
                            {
                                case Phone.TYPE_HOME:
                                    Log.e("Not Inserted", "Not inserted");
                                    break;
                                case Phone.TYPE_MOBILE:

                                    databaseHandler.insertContact(id, name, lastnumber, 0);
                                    break;
                                case Phone.TYPE_WORK:
                                    Log.e("Not Inserted", "Not inserted");
                                    break;
                            }

                        }

                    }
                    pCur.close();
                }

            }
        }

这里我先在 sqlite 数据库中插入数据,然后用 group by name 编写选择查询。

希望对你有帮助

关于java - Android 获取手机通讯录并删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32069014/

相关文章:

android - 折线不可见 Android Maps Api v2

android - ionic 标签恼人的激活颜色

android - 使用 Intent.ACTION_PICK 时是否可以排除 SIM 联系人?

javascript - 如何在servlet中获取java脚本值到java

android - 如何确定 URL 是否具有有效域或它是一个有效的 url?

Java 7 路径匹配器 : Does ** match 0 directories?

Android - 为现有联系人设置生日

java - Android SyncService 在 120 秒后被销毁

java - 以编程方式设置最大 Java 堆大小

Java错误扫描JSONObject程序使用扫描仪无限扫描