CommonDataKinds.Phone.CONTACT_ID 在联系人数据库中为空

Posted

技术标签:

【中文标题】CommonDataKinds.Phone.CONTACT_ID 在联系人数据库中为空【英文标题】:CommonDataKinds.Phone.CONTACT_ID is null in contacts db 【发布时间】:2019-06-10 16:56:36 【问题描述】:

我认为从 Phone.CONTENT_URI 检索联系人时,Phone.CONTACT_ID 列不可能为空。但是,我收到了很多来自我的用户的崩溃报告,例如:

Caused by java.lang.IllegalStateException: activity.contentResolver…taKinds.Phone.CONTACT_ID) must not be null

可能是因为我按 CONTACT_ID 对 sql 结果进行排序,这里是示例代码

activity.contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                arrayOf(ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
                        ContactsContract.CommonDataKinds.Phone.NUMBER,
                        ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY,
                        ContactsContract.CommonDataKinds.Phone.PHOTO_THUMBNAIL_URI,
                        ContactsContract.CommonDataKinds.Phone.IS_PRIMARY,
                        ContactsContract.CommonDataKinds.Phone.LAST_TIME_CONTACTED,
                        ContactsContract.CommonDataKinds.Phone.TIMES_CONTACTED,
                        ContactsContract.CommonDataKinds.Phone.PHOTO_URI,
                        ContactsContract.CommonDataKinds.Phone.TYPE,
                        ContactsContract.CommonDataKinds.Phone.LABEL),
                "$ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER = ?" +
                        " AND $ContactsContract.CommonDataKinds.Phone.NUMBER IS NOT NULL" +
                        " AND $ContactsContract.CommonDataKinds.Phone.CONTACT_ID IS NOT NULL",
                arrayOf("1"),
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID)

异常是从我提供的 sn-p 的第一行抛出的。现在我有两个问题:

1) 为什么我在我的 sql 查询中指定了 $ContactsContract.CommonDataKinds.Phone.CONTACT_ID IS NOT NULL 后会看到此错误?

2)Phone.CONTACT_ID在什么情况下为空?

【问题讨论】:

【参考方案1】:

尝试将排序参数更改为

val sortOrder = "$ContactsContract.CommonDataKinds.Phone.CONTACT_ID ASC"

CONTACT_ID 也不应该为空,所以我会删除

AND $ContactsContract.CommonDataKinds.Phone.CONTACT_ID IS NOT NULL

部分。

【讨论】:

但是如何添加"$ContactsContract.CommonDataKinds.Phone.CONTACT_ID ASC" 可以改变查询? “ASC”是默认排序顺序。 CONTACT_ID 也不应该为 null 但它看起来是 null,还是您认为错误消息具有误导性?

以上是关于CommonDataKinds.Phone.CONTACT_ID 在联系人数据库中为空的主要内容,如果未能解决你的问题,请参考以下文章