2012-04-11 3 views
1

Sorry, wenn das eine doppelte Frage sein könnte, habe ich den Abend damit verbracht, meinen Kopf darum zu wickeln, und ich kann nicht scheinen, andere Beiträge zu finden, die ein Licht darauf auch beleuchten könnten, so hoffe ich das ein paar Augenpaare könnten etwas entdecken.ContactsContract.Data implizite Join-Spalten funktionieren nicht?

Ich habe diese Impression aus der API-Dokumentation für ContactsContract.Data, dass, wenn Sie bestimmte Felder angeben, die Bibliothek magischen und führt eine implizite Join für Sie im Hintergrund.

Scheint nicht für mich zu arbeiten.

import android.provider.ContactsContract.CommonDataKinds.Phone; 

private Cursor getContacts() 
{ 
    // Run query 
    Uri uri = Phone.CONTENT_URI; 
    String[] projection = new String[] { 
      Phone.DISPLAY_NAME, 
      Phone.NUMBER, 
      Phone.CONTENT_ITEM_TYPE, 
      Phone.HAS_PHONE_NUMBER, 
      Phone.IN_VISIBLE_GROUP 
    }; 
    String selection = Phone.HAS_PHONE_NUMBER + " = '1' AND " + Phone.IN_VISIBLE_GROUP + " = '1'"; 
    String[] selectionArgs = null; 
    String sortOrder = Phone.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; 
    return getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder); 
} 

Wenn dies ausgeführt wird, stirbt es mit einem:

java.lang.IllegalArgumentException: Invalid column vnd.android.cursor.item/phone_v2 

Aus der Dokumentation für ContactsContract.CommonDataKinds.Phone es eindeutig fest, dass:

You can use all columns defined for ContactsContract.Data as well as the following aliases. 

Was bin ich?

Antwort

1

Phone.CONTENT_ITEM_TYPE ist Ihr Problem. Das ist kein Spaltenname, das ist eine Konstante, auf die Data.MIME_TYPE festgelegt ist. Entfernen Sie es von Ihrer Projektion und es sollte in Ordnung sein.