1

抱歉,如果这可能是一个重复的问题,我整个晚上都在试图解决这个问题,而且我似乎找不到其他可能对此有所了解的帖子,所以我希望有一些更多的眼睛可能会发现一些东西。

我从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.

我错过了什么?

4

1 回答 1

1

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

于 2012-07-27T21:29:41.550 回答