Distinto CONTACT_ID de ContactsContract.Data
Necesito hacer una consulta a ContactsContract.Data
tabla y los valores en CONTACT_ID
columna sería diferente (distinto).
Código:
- Comprobación de Android cuando se actualizó la última vez
- Filtra un managedQuery por extensión de archivo (o, alternativamente, tipo de archivo) para un Cursor de Android
- Cómo usar rawQuery en android
- Android SQLite - selecciónArgs que no sean cadenas
- comparar sqlite con cadena
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);
En primer lugar, he intentado agregar " DISTINCT
" a ContactsContract.Data.CONTACT_ID
en la proyección. Pero hubo una excepción: java.lang.IllegalArgumentException: Invalid column DISTINCT contact_id
Entonces, escribo de esta manera:
"'DISTINCT "+ContactsContract.Data.CONTACT_ID+"'". java.lang.IllegalArgumentException: Invalid column 'DISTINCT contact_id'
Entonces, agrego a selectionBuilder:
selectionBuilder.append(" GROUP BY ").append(ContactsContract.Data.CONTACT_ID);
Una vez más, una excepción: android.database.sqlite.SQLiteException: cerca de "GRUPO": error de sintaxis:, mientras que la compilación: 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
Por último, he anexar "grupo por" declaración justo después de sortOrder, pero:
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
¿Es posible hacer una consulta distinta? Tal vez, debo añadir algo a URI?
- Seleccione sólo los descendientes directos de la tabla con una ruta materializada
- ActiveAndroid Relación de muchos a muchos
- Recuperar el último registro en la tabla SQLite (de nuevo)
- Alcanzó el tamaño MAX para la caché de instrucciones compiladas-sql para la base de datos
- Android Sqlite IN, sin sintaxis
- ¿Cómo usar una clase de contrato en android?
- SQLite de Android - Clave principal - Insertar en la tabla
- CursorWindowAllocationException en el método ORMLite estándar
Si está dirigiendo dispositivos por debajo de ICS, puede usar la cláusula GROUP_BY agregando a )
antes del grupo por y a (
después de:
selectionBuilder.append(") GROUP BY (")
A partir de ICS y superiores, el intérprete de consulta es más inteligente y cierra cualquier paréntesis no cerrado para prevenir la inyección.
Sin embargo, no veo por qué necesita distintos contact_ids aquí. Un contacto debe tener probablemente sólo un dato para hacer la asociación con un grupo, por lo que probablemente recibirá un contacto diferente en cada línea.
Además, puede haber algo que ver con http://developer.android.com/reference/android/provider/ContactsContract.Contacts.html#CONTENT_GROUP_URI no está documentado, pero dada su posición, puede ser un acceso directo a Contactos pertenecientes a un grupo. Usted usaría ese Uri:
Uri uri = ContentUri.withAppendedId(ContactsContract.Contacts.CONTENT_GROUP_URI, groupId);
Y luego consulta como los contactos.CONTENT_URI
- ¿Cómo hago anuncios de banners (admob) comunes para todas mis actividades
- ¿Cómo puedo pasar una Lista <Map <String, String >> utilizando putExtra a otra intención