【问题标题】:I've checked contacts2.db, but contacts table doesn't have display_name column我检查了 contacts2.db,但联系人表没有 display_name 列
【发布时间】: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 列。怎么可能?

【问题讨论】:

    标签: android


    【解决方案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 呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 2011-05-16
    • 1970-01-01
    相关资源
    最近更新 更多