很抱歉,如果这可能是一个重复的问题,我已经花了整个晚上试图绕过这个,我似乎无法找到其他可能对此有所了解的帖子,所以我希望还有一双眼睛可能会发现一些东西。
我从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.
我错过了什么?
答案 0 :(得分:1)
Phone.CONTENT_ITEM_TYPE是您的问题。这不是列名,这是Data.MIME_TYPE设置为的常量。将它从投影中移除它应该没问题。