我检查了 contacts2.db,但联系人表没有 display_name 列

Posted

技术标签:

【中文标题】我检查了 contacts2.db,但联系人表没有 display_name 列【英文标题】:I've checked contacts2.db, but contacts table doesn't have display_name column 【发布时间】:2017-12-14 22:55:48 【问题描述】:

我从模拟器(API 19)中提取了 contacts2.db 并检查了联系人表。 contacts table

它没有 display_name 列。

但是,执行以下代码后,

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, REQUEST_CONTACT); 

public void onActivityResult(int requestCode, int resultCode, Intent data) 
    if (resultCode != Activity.RESULT_OK) 
        return;
    

    if (requestCode == REQUEST_DATE) 
    ...

     else if (requestCode == REQUEST_CONTACT && data != null) 
        Uri contactUri = data.getData();

        // Perform your query - the contactUri is like a "where" clause here
        Cursor c = getActivity().getContentResolver().query(contactUri
            , null
            , null
            , null
            , null);

        //cursor null check

        try 
            // Double-check that you actually got results
            if (c.getCount() == 0) 
                return;
            
            c.moveToFirst();
            String[] names = c.getColumnNames();
         finally 
            c.close();
        
    

当我检查名称时,列列表是

 sort_key
 photo_uri
 send_to_voicemail
 contact_status
 contact_status_label
 pinned
 display_name
 phonebook_label_alt
 phonebook_bucket
 contact_status_res_package
 photo_id
 in_default_directory
 custom_ringtone
 _id
 times_contacted
 phonebook_label
 lookup
 display_name_alt
 phonetic_name
 last_time_contacted
 contact_last_updated_timestamp
 has_phone_number
 in_visible_group
 is_user_profile
 display_name_source
 photo_file_id
 contact_status_ts
 phonebook_bucket_alt
 sort_key_alt
 contact_presence
 starred
 photo_thumb_uri
 contact_status_icon
 contact_chat_capability
 phonetic_name_style
 name_raw_contact_id

它包括 display_name 列。怎么可能?

【问题讨论】:

【参考方案1】:

你知道ContactsContract吗?

来自docs 关于Contract

该类通过确保即使 URI 的实际值、列名等发生更改也可以正确访问提供程序,从而在提供程序和其他应用程序之间建立了契约。

因此,display_name 列被提供商翻译为 实际 display_name 并发出请求。然后根据ContactsContract.中的定义翻译光标

【讨论】:

我知道 ContactsContract... 你查看我上传的图片了吗?当您单击第一行中的“联系人表”时,您可以看到它。我使用 SQLite 工具读取了 contacts2.db,该工具向我显示了列列表。 你是说没有这样的列可以映射到display_name吗? 是的。我可以在以下站点的“列”表中看到联系人表的列:developer.android.com/reference/android/provider/…。没有显示名称! display_name 在 raw_contacts 表中。 this 呢?

以上是关于我检查了 contacts2.db,但联系人表没有 display_name 列的主要内容,如果未能解决你的问题,请参考以下文章

从联系人表中选择/加入表但没有输出 - Android

分组表视图空白部分

检查 ABMultiValueRef 是不是没有值

如何检查用户是不是有gmail帐户

没有 PHP 的电子邮件联系表

2 年后,Paypal IPN 无法联系到听众请帮助