Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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
Android 与Contacts contract.Data不同的联系人ID_Android_Sql_Distinct_Android Contacts_Contactscontract - Fatal编程技术网

Android 与Contacts contract.Data不同的联系人ID

Android 与Contacts contract.Data不同的联系人ID,android,sql,distinct,android-contacts,contactscontract,Android,Sql,Distinct,Android Contacts,Contactscontract,我需要查询联系人合同。联系人ID列中的数据和值将不同(不同) 代码: 首先,我尝试将“DISTINCT”添加到投影中的contacts contract.Data.CONTACT\u ID。但有一个例外:java.lang.IllegalArgumentException:无效的列不同联系人id 然后,我这样写: "'DISTINCT "+ContactsContract.Data.CONTACT_ID+"'". java.lang.IllegalArgumentException: Inval

我需要查询
联系人合同。
联系人ID
列中的数据和值将不同(不同)

代码:

首先,我尝试将“
DISTINCT
”添加到投影中的
contacts contract.Data.CONTACT\u ID
。但有一个例外:
java.lang.IllegalArgumentException:无效的列不同联系人id

然后,我这样写:

"'DISTINCT "+ContactsContract.Data.CONTACT_ID+"'".
java.lang.IllegalArgumentException: Invalid column 'DISTINCT contact_id'
然后,我向selectionBuilder添加:

selectionBuilder.append(" GROUP BY ").append(ContactsContract.Data.CONTACT_ID);
再次出现一个异常:android.database.sqlite.SQLiteException:near“GROUP”:语法错误:,编译时:
选择联系人id、\u id、显示名称、从视图查找\u数据\u受限数据,其中(1)和(data1=?和mimetype=?按联系人分组\u id)按显示名称ASC排序

最后,我在sortOrder后面添加了“groupby”语句,但是:

android.database.sqlite.SQLiteException: near "GROUP": syntax error: , while compiling: SELECT contact_id, _id, display_name, lookup FROM view_data_restricted data WHERE (1) AND (data1= ? AND mimetype= ? ) ORDER BY display_name ASC GROUP BY contact_id
是否有可能使用distinct进行查询?
也许,我应该在URI中添加一些内容?

如果您针对的是ICS下面的设备,您可以使用GROUP_BY子句,在GROUP BY之前添加一个
,在GROUP BY之后添加一个

selectionBuilder.append(") GROUP BY (")
对于ICS及以上版本,查询解释器更智能,关闭所有未关闭的括号以防止注入

但是,我不明白为什么您需要不同的联系人ID。一个联系人可能只有一个数据才能与一个组建立关联,因此您可能会在每条线路上收到不同的联系人

此外,这可能与它有关,因为它没有文档记录,但考虑到它的位置,它很可能是对属于某个组的联系人的直接访问。您可以使用该Uri:

Uri uri = ContentUri.withAppendedId(ContactsContract.Contacts.CONTENT_GROUP_URI, groupId);

然后像联系人一样查询。CONTENT_URI

是的,我发现你的问题和你对GROUP BY注入的搜索。我发现它非常有趣:)太遗憾了,这是一个黑客攻击,它被阻止了:)但是,我寻求共同的决定,不仅仅是为了GROUP成员资格。它还必须移植到CommonDataTypes.Phone-我知道它的内容\u FILTER\u URI,但我的客户希望根据电话号码的任何部分进行过滤。我喜欢你的回答,但我想打开bounty,因为这个问题没有得到足够的关注。也许,你的答案是最好的。
Uri uri = ContentUri.withAppendedId(ContactsContract.Contacts.CONTENT_GROUP_URI, groupId);