В активности моего приложения для Android я хотел бы открыть средство выбора контента. И когда пользователь выбирает один из этих контактов, в таблицу должна быть добавлена новая запись (событие с типом "other") ContactsContract.CommonDataKinds.Event .
Начать процесс выбора контактов легко. Но затем нужно получить некоторые данные для выбранного контакта и создать новую запись в таблице событий. Вот код, который у меня есть, к сожалению, он не работает:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case CONTACT_PICKER_ID:
Uri contactData = data.getData();
//String contactID = contactData.getLastPathSegment();
// ADD A NEW BIRTHDAY FOR THE SELECTED CONTACT START
ContentValues values = new ContentValues();
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_OTHER);
values.put(ContactsContract.CommonDataKinds.Event.CONTACT_ID, 250);
values.put(ContactsContract.CommonDataKinds.Event.START_DATE, "2012-12-12");
Uri dataUri = getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
// ADD A NEW BIRTHDAY FOR THE SELECTED CONTACT END
break;
}
}
}
Для этого кода требуется разрешение "WRITE_CONTACTS".
Идентификатор контакта "250" жестко запрограммирован. Конечно, его следует извлечь из данных о намерениях, которые отправляются вместе с результатом выбора контактов.
Приведенный выше код заканчивается исключением NullPointerException. Почему это так? И как я могу получить идентификатор контакта из намерения, чтобы я мог использовать его для вставки новой строки?
Редактировать: Дополнительно, строка ...
getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
... выдает исключение. Что там не так?