Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
联系人ID在更新后增加(android API级别7及更高)_Android_Android Contacts - Fatal编程技术网

联系人ID在更新后增加(android API级别7及更高)

联系人ID在更新后增加(android API级别7及更高),android,android-contacts,Android,Android Contacts,我正在编写一个将android联系人信息与服务器信息同步的应用程序。服务器信息更改后,我正在更新所有原始联系人,每个人都很高兴。但我发现在用几个原始联系人更新联系人后,联系人ID的值增加了一个。如果我从设备更新联系人,联系人ID仍将保持不变 假设您与下一个数据有联系: contact_id : 42 raw_contact_ids : { 43, 44, 45 } (1) 更新后,您将有: contact_id : 43 raw_contact_ids : { 43, 44, 45 } (2

我正在编写一个将android联系人信息与服务器信息同步的应用程序。服务器信息更改后,我正在更新所有原始联系人,每个人都很高兴。但我发现在用几个原始联系人更新联系人后,联系人ID的值增加了一个。如果我从设备更新联系人,联系人ID仍将保持不变

假设您与下一个数据有联系:

contact_id : 42
raw_contact_ids : { 43, 44, 45 }
(1) 更新后,您将有:

contact_id : 43
raw_contact_ids : { 43, 44, 45 }
(2) 但是,如果使用用户界面使用设备更新同一联系人,您将获得:

contact_id : 42
raw_contact_ids : { 43, 44, 45 }
我不理解这种行为。我认为这可能是因为联系人聚合,但我不明白为什么(2)中的结果与(1)中的结果不同。我正在使用下一个代码更新原始联系人中的电话号码数据:

String selectPhone = Data.RAW_CONTACT_ID + "=? AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'" + " AND " + Phone.TYPE + "=? AND " + Phone._ID + "=?"; String[] selectArgs = new String[] { String.valueOf(rawContactId), String.valueOf(from.getType()), String.valueOf(id) }; ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI) .withSelection(selectPhone, selectArgs) .withValue(Phone.NUMBER, newNumber) .build()); 字符串选择Phone=Data.RAW\u CONTACT\u ID+“=”和“+Data.MIMETYPE+”=”+ Phone.CONTENT_ITEM_TYPE+“+”和“+Phone.TYPE+”=?和“+Phone.ID+”=?”; String[]selectArgs=newstring[]{String.valueOf(rawContactId),String.valueOf(from.getType()),String.valueOf(id)}; 添加(ContentProviderOperation.newUpdate(Data.CONTENT\u URI) .选择(选择Phone,选择Args) .withValue(电话号码、新号码) .build());
有人能解释一下我做错了什么吗?我真的需要这些联系人ID。

据我所知,在存储或使用联系人时最好使用查找键,使用联系人ID不会因聚合而保持静态。

什么是查找键,我应该使用它做什么?我从报纸上读到这件事,但不太明白。感谢您的解释。lookup_键本质上是联系人id的一个更静态的版本。因此,例如,当想要与联系人一起工作时,您可以使用此键而不是联系人id,因为据我所知,它在新的设备安装中似乎更为一致。下面是一个获取联系人的示例,其中包含一些详细信息,包括LOOKUP_KEY:contactsCursor=context.getContentResolver().query(Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_Uri,Uri.encode(messageFromNumber)),新字符串[]{ContactsContract.PhoneLookup.DISPLAY_NAME,ContactsContract.PhoneLookup.LOOKUP__KEY},null,null);