android - ContactsContract.Data 隐式连接列不起作用?

标签 android

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

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

我错过了什么?

最佳答案

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

关于android - ContactsContract.Data 隐式连接列不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10108199/

相关文章:

java - 如何使用另一个类中的 int?

android - 如何使用按钮、编辑文本框和 if/else 语句设置密码以打开页面 (Android)

java - Android 中的 Socket.read() 关闭时不返回任何内容并且不会抛出异常

android - 如何突出显示 Recycler View 的选定项目?

android - 如何以编程方式检测哪些应用导致手机唤醒?

android - 替代android中的核心数据?

android - 在 android 上的声明中从资源设置字段

android - 无法在 Eclipse 的 SQLite 管理器插件中打开数据库文件?

java - 私有(private)静态类和 CursorLoader

android - 改造关闭响应机构