Android – 新的数据记录被添加到错误的联系人

Android – 新的数据记录被添加到错误的联系人,第1张

概述我正在尝试添加数据记录到一个已经存在的联系人,我找到联系人使用电话查找,我采取联系_id字段,并添加一个新的数据与raw_contact_id设置为_id字段. 在某些联系人上,它不起作用,它将数据与不同的联系人相匹配. (我认为它与存储在SIM卡上的联系人有关) 请咨询,也许你有一种不同的方法来添加数据 代码示例: LinkedList<Long> lcv = new LinkedList<Lo 我正在尝试添加数据记录到一个已经存在的联系人,我找到联系人使用电话查找,我采取联系_ID字段,并添加一个新的数据与raw_contact_ID设置为_ID字段.
在某些联系人上,它不起作用,它将数据与不同的联系人相匹配.
(我认为它与存储在SIM卡上的联系人有关)

请咨询,也许你有一种不同的方法来添加数据

代码示例:

linkedList<Long> lcv = new linkedList<Long>();    ContentResolver cr = getContentResolver();    Uri uri = Uri.withAppendedpath(PhoneLookup.CONTENT_FILTER_URI,Uri.encode(phoneNumber));    Cursor c = cr.query(uri,null,null);    try {        while (c.movetoNext()) {            Uri lookupUri = Uri.withAppendedpath(Contacts.CONTENT_LOOKUP_URI,c.getString(c.getColumnIndex(PhoneLookup.LOOKUP_KEY)));            Cursor c2 = getContentResolver().query(lookupUri,new String[] { Contacts._ID,Contacts.disPLAY_name },null);            try {                if (c2.movetoNext()) {                    Log.i(TAG,"found: " + c2.getLong(c2.getColumnIndex(Contacts._ID)) + "," + c2.getString(c2.getColumnIndex(Contacts.disPLAY_name)));                    lcv.add(c2.getLong(c2.getColumnIndex(Contacts._ID)));                } else {                    Log.e(TAG,"Failed to lookup");                }            } finally {                c2.close();            }        }    } finally {        c.close();    }    for (Long rawID : lcv) {                        Cursor c3 = cr.query(RawContacts.CONTENT_URI,RawContacts.CONTACT_ID + "=?",new String[] {rawID+""},null);                        if (c3.movetoNext()) {                            Log.e(TAG,"aaaa: " + c3.getString(c3.getColumnIndex(Contacts.disPLAY_name)));                        } else {                            Log.e(TAG,"errrrror");                        }                        ContentValues cv = new ContentValues();                        cv.put(Data.RAW_CONTACT_ID,rawID + "");                        cv.put(Data.MIMETYPE,MyMime.MIMETYPE);                        cv.put(Data.DATA1,"mydata");                        cv.put(Data.SYNC1,syncvalue);                        Uri newIns = cr.insert(ContactsContract.Data.CONTENT_URI,cv);                        Log.i(TAG,"insert: " + newIns + "," + name);                    }
解决方法 问题在于您选择Contacts._ID并使用此标识填充linkedList lcv中的数据.
Cursor c2 = getContentResolver().query(lookupUri,null);

您实际上需要一个RAW_CONTACT_ID.

disPLAY_name可以从Contacts数据库/ ContactsContract.Data’OR’数据库/ ContactsContract.CommonDataKinds.Structuredname’OR’database / RawContactsEntity中获取.在后两种情况下,您将能够使用RAW_CONTACT_ID获取disPLAY_name

几个关键指针:

> Contacts._ID = Data.CONTACT_ID
> RawContacts._ID = Data.RAW_CONTACT_ID
> RawContacts.CONTACT_ID = Contacts._ID
> RawContactsEntity._ID = RawContacts._ID

听起来很混乱让我尝试…

>联系人数据库分为3个表联系人,原始联系人和数据.
>每个表包含列(_ID),它是自动递增的主键.
>数据表包含所有联系信息,如电话号码,邮件ID,地址等.
>原始联系人指向创建的实际联系人.因此,我们在添加联系人时使用原始联系人.
>用户无法在联系人表中添加任何数据.由于aggregation of contacts,此表中的数据在内部填充.
>您的逻辑为某些联系人工作的原因是:_ID为联系人,原始联系人保持相同,直到发生任何联系人聚合.让我们说你添加两个同名的联系人abc.这里,原始联系人的_ID会增加两倍,而联络人的_ID仅增加一次,因为这两个联系人由于aggregation of contacts而被合并

有关详细信息,请参阅this.

在您的案例中获取信息的最佳方法是使用ContactsContract.RawContactsEntity(raw_contacts表的外部连接与数据表)

参考:http://developer.android.com/reference/android/provider/ContactsContract.RawContactsEntity.html

总结

以上是内存溢出为你收集整理的Android – 新的数据记录被添加到错误的联系人全部内容,希望文章能够帮你解决Android – 新的数据记录被添加到错误的联系人所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1131551.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存