Qui*_*ick 4 sql android distinct contactscontract android-contacts
我需要对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);
Run Code Online (Sandbox Code Playgroud)
首先,我试图在投影中添加" DISTINCT" ContactsContract.Data.CONTACT_ID.但有一个例外:java.lang.IllegalArgumentException: Invalid column DISTINCT contact_id
然后,我这样写:
"'DISTINCT "+ContactsContract.Data.CONTACT_ID+"'".
java.lang.IllegalArgumentException: Invalid column 'DISTINCT contact_id'
Run Code Online (Sandbox Code Playgroud)
然后,我添加到selectionBuilder:
selectionBuilder.append(" GROUP BY ").append(ContactsContract.Data.CONTACT_ID);
Run Code Online (Sandbox Code Playgroud)
再一次,异常:android.database.sqlite.SQLiteException:near"GROUP":语法错误:,同时编译: 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
Run Code Online (Sandbox Code Playgroud)
是否有可能使用不同的查询?也许,我应该向URI添加一些东西?
如果您的目标是ICS以下的设备,您可以通过在分组)前后添加a来使用GROUP_BY子句(:
selectionBuilder.append(") GROUP BY (")
Run Code Online (Sandbox Code Playgroud)
从ICS及更高版本开始,查询解释器更加智能,并关闭任何未闭合的括号以防止注入.
但是,我不明白为什么你需要明确的contact_ids.联系人应该只有一个数据来与一个组建立关联,因此您可能会在每一行上收到不同的联系人.
此外,可能与http://developer.android.com/reference/android/provider/ContactsContract.Contacts.html#CONTENT_GROUP_URI有关,但没有记录,但鉴于其位置,它可能是直接访问属于某个组的联系人.你会用那个Uri:
Uri uri = ContentUri.withAppendedId(ContactsContract.Contacts.CONTENT_GROUP_URI, groupId);
Run Code Online (Sandbox Code Playgroud)
然后像Contacts.CONTENT_URI一样查询它
| 归档时间: |
|
| 查看次数: |
3645 次 |
| 最近记录: |