Android ContactsContract.Contact отсутствующих констант из API? - PullRequest
2 голосов
/ 30 сентября 2010

Я уже давно использую API ContactsContract и натолкнулся на две «колонки», перечисленные на странице API для ContactsContract.Contacts, которые, по-видимому, на самом деле не подлежат оценке.

Значения (под заголовком столбцов): "NAME_RAW_CONTACT_ID" и "DISPLAY_NAME_PRIMARY"

При чтении API эти два значения, казалось бы, соединяются со структурированным именем (в DATA), используемым для создания отображаемого имени для данного контакта. Доступ к этому напрямую из таблицы контактов был бы для меня невероятно полезен в данный момент, но, насколько я могу судить, они на самом деле не находятся в рабочем API (я тестировал как 2.1, так и 2.2).

Связанные константы не существуют в объекте Contacts, и попытка прямого доступа к полям (используя строковые версии строчных букв, которые я видел в дампах кода онлайн) приводит к ошибке sql - недопустимый столбец, так как вы можете ожидать.

Кому-нибудь повезло больше с этим? Это на самом деле в API?

Edit: Я еще раз проверил, и вот некоторые связанные значения из RawContacts, которые перечислены в API, но, похоже, на самом деле его нет: DISPLAY_NAME_ALTERNATIVE, DISPLAY_NAME_PRIMARY, DISPLAY_NAME_SOURCE, PHONETIC_NAME, PHONETIC_NAME_STYLE, SORT_KEY_ALIMNATIVE.

Похоже, что все эти функции еще не включены в API и по ошибке не отфильтрованы при выпуске javadoc. Если другие пользователи также не могут получить доступ к этим функциям, возможно, стоит подать отчет об ошибке.

Ответы [ 3 ]

0 голосов
/ 02 марта 2011

Я тоже нашел то же самое. Когда я просмотрел приложение для контактов, они использовали DISPLAY_NAME_ALTERNATIVE. В API они перечислили их в интерфейсе

http://developer.android.com/reference/android/provider/ContactsContract.DataColumnsWithJoins.html

Я также вытащил родные контакты и проверил таблицу raw_contacts. Там я смог найти «display_name_alt» в качестве кулона.

Так что я не знаю, как поступить. Я не знаю, поможет ли название столбца

0 голосов
/ 07 июня 2011

Я также хотел использовать некоторые из этих полей (версия 2.2), но статическая строка ContactsContract.DataColumnsWithJoins.DISPLAY_NAME_ALTERNATIVE не видна.Поэтому я непосредственно использовал его значение для запроса "display_name_alt", и у меня были данные этого поля.

Я также использовал запрос, запрашивающий все поля (помещая ноль в переменную 'String [] projection' managedQuery () и извлекли все поля.Я вставил ошибку в переменную sortOrder, чтобы получить ошибку и автоматически созданный SQL.Таким образом, SQL был похож на это

near "mimetype": syntax error: , while compiling:
SELECT 
data_version, 
phonetic_name, 
phonetic_name_style, 
contact_id, 
lookup, 
data12, 
data11, 
data10, 
mimetype, 
data15, 
data14, 
data13, 
display_name_source, 
data_sync1, 
data_sync3, 
data_sync2, 
data_sync4, 
account_type, 
custom_ringtone, 
status_update_id, 
status_updates.status AS status, 
data1, 
data4, 
data5, 
data2, 
data3, 
data8, 
account_type  AS ext_account_Type, 
data9, 
group_sourceid, 
data6, 
account_name, 
data7, 
display_name, 
in_visible_group, 
display_name_alt, 
contacts_status_updates.status_res_package AS contact_status_res_package, 
is_primary, 
contacts_status_updates.status_ts AS contact_status_ts, 
raw_contact_id, 
times_contacted, 
contacts_status_updates.status AS contact_status, 
status_updates.status_res_package AS status_res_package, 
status_updates.status_icon AS status_icon, 
contacts_status_updates.status_icon AS contact_status_icon, 
presence.mode AS mode, 
version, 
last_time_contacted, 
res_package, _id, 
name_verified, 
status_updates.status_ts AS status_ts, 
dirty, 
is_super_primary, 
photo_id, 
send_to_voicemail, 
name_raw_contact_id, 
contacts_status_updates.status_label AS contact_status_label, 
status_updates.status_label AS status_label, 
sort_key_alt, 
starred, 
sort_key, 
agg_presence.mode AS contact_presence, 
sourceid 
FROM
 view_data_restricted data
 LEFT OUTER JOIN agg_presence ON (agg_presence.presence_contact_id=contact_id)
 LEFT OUTER JOIN status_updates contacts_status_updates ON (status_update_id=contacts_status_updates.status_update_data_id)
 LEFT OUTER JOIN presence ON (presence_data_id=data._id)
 LEFT OUTER JOIN status_updates ON (status_updates.status_update_data_id=data._id) 
WHERE (1) 
ORDER BY contact_id mimetype

Таким образом, вы можете увидеть все доступные поля.

То, что я не знаю как, это получить курсор с строкой SQL из Uri, какrawQuery () ...

0 голосов
/ 24 ноября 2010

Интересная вещь об этих предметах вы упоминаете. Где написано «поскольку уровень API» уровень не упоминается. Я думаю, что сообщение об ошибке в порядке.

...