Android:无法从联系人列表中获取任何联系人 [英] Android : Not getting any contacts from contact list

查看:132
本文介绍了Android:无法从联系人列表中获取任何联系人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我通过

 val cursor = context.contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null)

但是当我的联系人中没有任何联系人时会出现问题列表,然后在 xxx @ gmail帐户中在手机中同步联系人后,从网络端 google帐户中添加联系人,所有联系人会显示在我的联系人列表中,但是当我尝试获取联系人时,它返回0

but the problem occurs when I don't have any contacts in my contact list and I adding contacts in google account from web end, after I sync contact in my phone from this xxx@gmail account, All contacts display in my contact list but when I am trying to fetch contact then, It returns 0.

我不知道问题出在哪里,还有其他方法可以获取此联系人!

I don't know what is the problem, there is any other way to fetch this contacts!

如果我插入新的联系人,而不是通过查询从上面获得此联系人的,但是找不到使用 google帐户网络面板中添加的联系人。

If I insert new contact than I got this contact from above query, but can't find those contacts which I have added in web panel using google account.

如果您遇到此类问题,请帮助我。

Help me if you face this type of problem.

我正在使用以下代码来获取联系人

I am using this following code to fetch contacts

val cursor = context.contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null)
    val projection = arrayOf(ContactsContract.Contacts._ID, ContactsContract.Data.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.PHOTO_URI, ContactsContract.CommonDataKinds.Phone.TYPE)
    val alContacts = ArrayList<Contact>()
    var mMapContact = JSONObject()
    if (cursor!!.moveToFirst()) {
        do {
            val id = cursor!!.getString(cursor!!.getColumnIndex(ContactsContract.Contacts._ID))
            if (Integer.parseInt(cursor!!.getString(cursor!!.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                val pCur = context.contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", arrayOf<String>(id), ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC")
                var mListMobile = ArrayList<MobileType>()
                var mNameContact = ""
                while (pCur!!.moveToNext()) {
                    val number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
                    mNameContact = pCur!!.getString(pCur!!.getColumnIndex(ContactsContract.Data.DISPLAY_NAME))
                    val type = pCur.getInt(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE))
                    when (type) {
                        ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE -> {
                            mListMobile.add(MobileType(number, 0))
                            mMapContact.put(number.replace(Regex(CONTACT_PLUS_PATH_PREFIX), ""), mNameContact)
                        }
                        ContactsContract.CommonDataKinds.Phone.TYPE_HOME -> {
                            mListMobile.add(MobileType(number, 1))
                            mMapContact.put(number.replace(Regex(CONTACT_PLUS_PATH_PREFIX), ""), mNameContact)
                        }
                        ContactsContract.CommonDataKinds.Phone.TYPE_WORK -> {
                            mListMobile.add(MobileType(number, 2))
                            mMapContact.put(number.replace(Regex(CONTACT_PLUS_PATH_PREFIX), ""), mNameContact)
                        }
                    }
                    /*val contactNumber = pCur!!.getString(pCur!!.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
                    val contactName = pCur!!.getString(pCur!!.getColumnIndex(ContactsContract.Data.DISPLAY_NAME))
                    val contactInfo = ContactInfo(""+id, ""+contactName, "", ""+contactNumber)
                    LogUtil.e(TAG, "getContactList: $contactNumber - $contactName - $id")
                    alContacts.add(contactInfo)
                    break*/
                }
                pCur?.close()
                if(mListMobile.size > 0) {
                    var contact : Contact? = null
                    for (mobile in mListMobile) {
                        contact = Contact(id, "" + mNameContact, ""+mNameContact, false, null, ""+mobile.mobile, "", mobile.type)
                        alContacts.add(contact!!)
                    }
                }
            }
        } while (cursor?.moveToNext())
    }


推荐答案

您可以像下面这样使用:

String[] projection = {
                        ContactsContract.Data.MIMETYPE,
                        ContactsContract.Data.CONTACT_ID,
                        ContactsContract.Contacts.DISPLAY_NAME,
                        ContactsContract.Contacts.PHOTO_URI,
                        ContactsContract.Contacts.STARRED,
                        ContactsContract.RawContacts.ACCOUNT_TYPE,
                        ContactsContract.CommonDataKinds.Contactables.DATA,
                        ContactsContract.CommonDataKinds.Contactables.TYPE
                };



                String selection = ContactsContract.Data.MIMETYPE + " in (?, ?)" + " AND " +
                        ContactsContract.Data.HAS_PHONE_NUMBER + " = '" + 1 + "'";

                String[] selectionArgs =
                        {
                                ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE,
                                ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
                        };
                String sortOrder = ContactsContract.Contacts.SORT_KEY_ALTERNATIVE;



                Uri uri = null;
                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
                    uri = ContactsContract.CommonDataKinds.Contactables.CONTENT_URI;
                }
                else
                {
                    uri = ContactsContract.Data.CONTENT_URI;

                }


                Cursor cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);

                final int mimeTypeIdx = cursor.getColumnIndex(ContactsContract.Contacts.Data.MIMETYPE);
                final int idIdx = cursor.getColumnIndex(ContactsContract.Data.CONTACT_ID);
                final int nameIdx = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
                Log.e("Contacts----", "ontacts__nameIdx----" + nameIdx);
                final int dataIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Contactables.DATA);
                final int typeIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Contactables.TYPE);
                final int photo = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Contactables.PHOTO_URI);
                final int account_type = cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE);
                sb = new StringBuilder();
                while (cursor.moveToNext()) {
                    long id = cursor.getLong(idIdx);

                    int type = cursor.getInt(typeIdx);
                    String data = cursor.getString(dataIdx);
                    String mimeType = cursor.getString(mimeTypeIdx);
                    String photo_uri = cursor.getString(photo);
                    String account_t = cursor.getString(account_type);

                    Log.e("Contacts----", "Contacts__----" + nameIdx+"---"+type+"---"+data+"----"+id);
                    if (mimeType.equals(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)) {

                        /**For email  **/
                        Log.e("Contacts----","Contacts__>>"+type+"---data---"+data+"--id--"+id);

                    } else {
                        //
                        Log.e("Contacts-----","Contacts__else>>"+type+"---data---"+data+"--id--"+id);

                    }
                }

                cursor.close();

希望它会为您提供帮助。

这篇关于Android:无法从联系人列表中获取任何联系人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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