Столбец _ID в базе данных контактов - PullRequest
0 голосов
/ 12 ноября 2010

Я прочитал, что различные записи в разных таблицах связаны через столбец _ID в этой таблице.Например, у контакта может быть _ID = 1, который я получаю через

ContactsContract.Contacts._ID

, и теперь я хочу прочитать номер телефона этого контакта, используя

Cursor phoneCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId , null, null); 
//...
String number = phoneCursor.getString(phoneCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
String id = phoneCursor.getString(phoneCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone._ID));

. Это нормально работает, но чтоЯ ожидаю, что если _ID контакта равен 1, то _ID номера телефона также один, поскольку они принадлежат друг другу, но они не равны.Итак, вопрос в том, как Android соответствует этим записям?

Спасибо, A.

Ответы [ 2 ]

1 голос
/ 12 ноября 2010

Контакт соответствует 1 или более необработанным контактам.Фактические данные для контакта хранятся как

ContactsContract.Contacts.Data

Каждый элемент данных содержит идентификатор необработанного контакта, которому он принадлежит.Каждый необработанный контакт содержит идентификатор контакта, которому он принадлежит.

Таким образом, с помощью идентификатора контакта вы можете найти, какие необработанные контакты он представляет.Получите необработанные идентификаторы контактов, а затем выясните, какие данные находятся в этом контакте.

0 голосов
/ 30 января 2011

вы можете получить более подробную информацию, когда увидите таблицы базы данных

Насколько я понимаю, это информация, которую я получил от просмотра файла android contacts2.db с помощью браузера sqlite3 db

Я создал около 6 контактов для тестирования моих контактов Android

в таблице контактов _id и raw_contact_id фактически одинаковы (это означает, что поставщик ContactsContract.Contacts)

в таблице данных мы получаем реальные данные о человеке, такие как номер телефона и адрес электронной почты, а также имя и фамилию, используя mimetype Id в качестве условия where

при рассмотрении таблицы данных используйте raw_contact_id в качестве условия where для получения конкретной записи контакта

ex мой raw_contact_id равен 1

Я получил 3 строки, состоящие из электронной почты, телефона и отображаемого имени в столбце data1

вы можете спросить, что если нам нужен только телефон, электронная почта или отображаемое имя ... там вам понадобится mimetype_id в качестве условия where

чтобы получить номер телефона, mimetype_id равен 5 чтобы получить display_name mimetype_id равен 6 для получения электронной почты mimetype_id составляет 1

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

доступ к контактной информации только по contact_id или raw_contact_id, а не по _id, который есть в каждой таблице ... этот столбец предназначен для различных целей ..

вы можете взглянуть на то, что я говорю на этом изображении http://img94.imageshack.us/i/tablesxa.jpg

...