Main | Registration | LoginВторник, 16.04.2024, 20:32
Android applications
BlogWelcome Гость | RSS
Site menu

Statistics

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Login form

Main » 2011 » Январь » 22 » Читаем данные контактов в Android 2.x
23:11
Читаем данные контактов в Android 2.x

Для тех, кто ранее работал с данными контактов в версиях системы ниже 2,0 переход на новую модель работы с данными старшей версии системы может показаться болезненным и не совсем логичным. Ниже я приведу фрагменты кода, которые делают примерно одно и тоже в разных версиях системы. Если раньше можно было читать данные достаточно коротким фрагментом кода, типа следующего:


// Работает в Android 1,6
// Form an array specifying which columns to return.
String[] projection = new String[] {
People._ID,
People.NAME,
People.NUMBER
};

// Get the base URI for the People table in the Contacts content provider.
Uri contacts = People.CONTENT_URI;

// Make the query.
Cursor managedCursor = managedQuery(contacts,
projection, // Which columns to return
null, // Which rows to return (all rows)
null, // Selection arguments (none)
// Put the results in ascending order by name
People.NAME + " ASC");

// Process contact data
if (cur.moveToFirst()) {

String name;
String phoneNumber;
int nameColumn = cur.getColumnIndex(People.NAME);
int phoneColumn = cur.getColumnIndex(People.NUMBER);

do {
// Get the field values
name = cur.getString(nameColumn);
phoneNumber = cur.getString(phoneColumn);
System.out.println("name: " + name + ", phone number: " + phoneNumber);

} while (cur.moveToNext());
}


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


// Работает в 2,0

private void readNewStyle() {

String phoneTypes[] = {"Home", "Mobile", "Work", "Fax work", "Fax home", "Pager", "Other",
"Callback", "Car", "Company main", "ISDN", "Main", "Other fax", "Radio",
"Telex", "TTY TDD", "Work mobile", "Work pager", "Assistand", "MMS"};

Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

while(cursor.moveToNext()) {
String ContactID = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
System.out.println("Name: " + name + " _ID: " + ContactID);
String hasPhone = cursor.getString(
cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

if(hasPhone.compareTo("1") == 0) {

Cursor phoneCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "='" + ContactID + "'",
null, null);

while(phoneCursor.moveToNext()) {
String number = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String numberType = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
switch(Integer.parseInt(numberType)) {

// Отбираем знакомые типы телефонных номеров
case ContactsContract.CommonDataKinds.Phone.TYPE_HOME:
case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE:
case ContactsContract.CommonDataKinds.Phone.TYPE_WORK:
case ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK:
case ContactsContract.CommonDataKinds.Phone.TYPE_FAX_HOME:
case ContactsContract.CommonDataKinds.Phone.TYPE_PAGER:
case ContactsContract.CommonDataKinds.Phone.TYPE_OTHER:
case ContactsContract.CommonDataKinds.Phone.TYPE_CALLBACK:
case ContactsContract.CommonDataKinds.Phone.TYPE_CAR:
case ContactsContract.CommonDataKinds.Phone.TYPE_COMPANY_MAIN:
case ContactsContract.CommonDataKinds.Phone.TYPE_ISDN:
case ContactsContract.CommonDataKinds.Phone.TYPE_MAIN:
case ContactsContract.CommonDataKinds.Phone.TYPE_OTHER_FAX:
case ContactsContract.CommonDataKinds.Phone.TYPE_RADIO:
case ContactsContract.CommonDataKinds.Phone.TYPE_TELEX:
case ContactsContract.CommonDataKinds.Phone.TYPE_TTY_TDD:
case ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE:
case ContactsContract.CommonDataKinds.Phone.TYPE_WORK_PAGER:
case ContactsContract.CommonDataKinds.Phone.TYPE_ASSISTANT:
case ContactsContract.CommonDataKinds.Phone.TYPE_MMS: {
System.out.println("phone number: " + number + "("+phoneTypes[Integer.parseInt(numberType)]+")");
break;
}

// Для всех остальных
default: {
System.out.println("phone number: " + number + "(" + numberType + ")");
break;
}
}
}
phoneCursor.close();
} else {
System.out.println("no phone number found");
}

Cursor emailCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
new String[] { ContactsContract.CommonDataKinds.Email.DATA,
ContactsContract.CommonDataKinds.Email.TYPE},
ContactsContract.CommonDataKinds.Email.CONTACT_ID + "='" + ContactID + "'", null, null);

while(emailCursor.moveToNext()) {

String emailTypes[] = {"Home", "Work", "Other", "Mobile", "Custom"};
String email = emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
String emailType = emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));

switch(Integer.parseInt(emailType)) {

// Отбираем знакомые типы электронных адресов
case 1: case 2: case 3: case 4: case 5:
{
System.out.println(emailTypes[Integer.parseInt(emailType)] + email);
break;
}

default: {
System.out.println("Not listed type: " + email);
break;
}
}
}
emailCursor.close();
}
cursor.close();


Стоит отметить, что проект для работы с контактами версии в стиле версии 2,0 может включать в себя код для работы в стиле 1,6 — Eclipse укажет вам на то что вызовы этих методов помечены как устаревшие и зачеркнёт их. Однако проект будет успешно собираться и работать. За вами лишь определение версии и вызов соответствующего метода длы выборки данных.


Views: 1773 | Added by: linux777777 | Rating: 0.0/0
Total comments: 0
Имя *:
Email *:
Код *:
Search

Calendar
«  Январь 2011  »
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
24252627282930
31

Entries archive

Site friends
  • Create a free website


  • Copyright MyCorp © 2024
    Сделать бесплатный сайт с uCoz