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:

 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?

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

  • Android SQL Lite no crece
  • Android: SQLite, cursor.moveToNext () siempre devuelve false
  • Limitar los registros obtenidos en Android (base de datos Sqlite)
  • Sqlite Añadir columna en la tabla en una posición determinada (Android)
  • Android cursor cómo obtener valores nulos de columnas
  • Ejemplo de cuenta de SQLite
  • Relación activa de muchos a muchos de Android
  • Android SQLite Eliminar problema de fila
  • ¿Cómo puedo hacer que sea más difícil para los jugadores hackear datos de nivel de juego?
  • Cómo utilizar el argumento LIMIT en una consulta SQLite con Android
  • Android cursor.moveToNext ()?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.