gpt4 book ai didi

android - 与 ContactsContract.Data 不同的 CONTACT_ID

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:21 26 4
gpt4 key购买 nike

我需要查询 ContactsContract.Data 表,CONTACT_ID 列中的值将不同(不同)。

代码:

final Uri uri = ContactsContract.Data.CONTENT_URI;
final String[] projection = new String[] {//
ContactsContract.Data.CONTACT_ID, //
ContactsContract.Data._ID, //
ContactsContract.Data.DISPLAY_NAME,//
ContactsContract.Data.LOOKUP_KEY //
};
final StringBuilder selectionBuilder = new StringBuilder();
selectionBuilder.append(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID);
selectionBuilder.append("= ? AND ");
selectionBuilder.append(ContactsContract.Data.MIMETYPE);
selectionBuilder.append("= ? ");
final String selection = selectionBuilder.toString();
final String[] selectionArgs = new String[] {//
String.valueOf(groupId), //
ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE //
};
return context.getContentResolver().query(uri, projection, selection, selectionArgs, null);

首先,我尝试在投影中将“DISTINCT”添加到ContactsContract.Data.CONTACT_ID。但是有一个异常(exception):java.lang.IllegalArgumentException: Invalid column DISTINCT contact_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": syntax error: , while compiling: SELECT contact_id, _id, display_name, lookup FROM view_data_restricted data WHERE (1) AND (data1 = ? AND mimetype= ? GROUP BY contact_id) ORDER BY display_name ASC

最后,我在 sortOrder 之后附加了“group by”语句,但是:

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

有没有可能用不同的方式进行查询?也许,我应该向 URI 附加一些内容?

最佳答案

如果您的目标设备低于 ICS,则可以通过在分组依据之前添加 ) 和在分组依据之后添加 (:

来使用 GROUP_BY 子句:
selectionBuilder.append(") GROUP BY (")

在 ICS 及更高版本中,查询解释器更加智能并关闭任何未闭合的括号以防止注入(inject)。

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

另外,可能与http://developer.android.com/reference/android/provider/ContactsContract.Contacts.html#CONTENT_GROUP_URI有关它没有记录,但鉴于其位置,它很可能是对属于组的联系人的直接访问。你会使用那个 Uri :

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

然后像Contacts.CONTENT_URI一样查询它

关于android - 与 ContactsContract.Data 不同的 CONTACT_ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9635324/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com