2012-04-11 72 views
1

对不起,如果这可能是一个重复的问题,我已经花了整个晚上试图把我的头围绕此,我似乎无法找到其他职位,可能会对此也投下一些光,所以我希望多一双眼睛可能会发现一些东西。ContactsContract.Data隐式连接列不起作用?

我对ContactsContract.Data的API文档有这样的印象,当您指定某些字段时,该库会有一些魔力,并在后台为您执行隐式加入。

似乎没有为我工作。

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); 
} 

当这个运行时,它死了:

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

从文档的ContactsContract.CommonDataKinds.Phone它明确指出:

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

我缺少什么?

回答

1

Phone.CONTENT_ITEM_TYPE是你的问题。这不是列名,这是Data.MIME_TYPE设置的常量。将它从投影中移除,应该没问题。