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

时间:2017-07-11 03:50:22

标签: android

我从模拟器(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 个答案:

答案 0 :(得分:0)

您知道ContactsContract

docs关于合同

  

该类通过确保即使URI的实际值,列名等更改等都可以正确访问提供程序,也可以在提供程序和其他应用程序之间建立合同。 / p>

因此提供商将display_name列转换为实际 display_name并发出请求。然后根据ContactsContract.

中的定义翻译光标