2010-11-12 4 views
0

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

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 соответствует этим записям?

Благодаря А.

ответ

0

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

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

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

в таблице контактов с _id и raw_contact_id на самом деле то же самое (это означает, что провайдер ContactsContract.Contacts)

в таблице данных мы получаем реальные детали человека, как номер телефона и адрес электронной почты и ПгвЬЫате и фамилию, используя MIMETYPE Id как условие где

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

бывший мой raw_contact_id является 1

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

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

получить PHONENUMBER mimetype_id 5 получить display_name mimetype_id 6 , чтобы получить по электронной почте mimetype_id 1

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

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

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

1

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

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

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

Смежные вопросы