Я пишу приложение, которое позволяет пользователю удалять контакты со своего устройства Android и хранить их в отдельной базе данных. Они также должны иметь возможность восстановить контакты на своем телефоне, но у меня возникают проблемы с этой частью. Я извлекаю контактную информацию из своей базы данных и создаю контактный объект, содержащий идентификатор контакта, ключ поиска, структурированное имя, организацию, список массивов телефонных объектов (которые содержат номер телефона и тип) и т. Д. Это все. Моя функция восстановления этой информации на телефон выглядит следующим образом:Программная установка новых контактов Android на телефон
public void addContact(Contact contact)
{
ContentValues values = new ContentValues();
values.put("contact_id", contact.getContactId());
values.put("lookup", contact.getLookupKey());
values.put("mimetype", StructuredName.CONTENT_ITEM_TYPE);
values.put("data1", contact.getStructuredName().getDisplayName());
values.put("data2", contact.getStructuredName().getGivenName());
values.put("data3", contact.getStructuredName().getFamilyName());
values.put("data4", contact.getStructuredName().getPrefix());
values.put("data5", contact.getStructuredName().getMiddleName());
values.put("data6", contact.getStructuredName().getSuffix());
context.getContentResolver().insert(Data.CONTENT_URI, values);
}
И, ну, вот где приложение падает. Я использовал этот метод для вставки данных в мою базу данных без каких-либо проблем, и я могу проверить, правильно ли он хранится. Поэтому я предполагаю, что лучше вставить контакты в устройство, но я понятия не имею, что это будет. Может ли кто-нибудь дать мне пример программного создания и вставки контакта в устройство пользователя? Я был бы доволен, даже если бы увидел контакт с созданным отображаемым именем.
В случае, если это имеет значение, я также попытался поставить этот код выше вставки структурированного имени, но безрезультатно:
values.put("_id", contact.getContactId());
values.put("lookup", contact.getLookupKey());
values.put("display_name", contact.getStructuredName().getDisplayName());
context.getContentResolver().insert(Contacts.CONTENT_URI, values);
values.clear();
Edit: Вот мой LogCat журнал ошибок для того, когда сбой приложения:
05-07 20:31:53.941: E/Trace(819): error opening trace file: No such file or directory (2)
05-07 20:34:39.035: D/AndroidRuntime(853): Shutting down VM
05-07 20:34:39.048: W/dalvikvm(853): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
05-07 20:34:39.197: E/AndroidRuntime(853): FATAL EXCEPTION: main
05-07 20:34:39.197: E/AndroidRuntime(853): java.lang.NullPointerException
05-07 20:34:39.197: E/AndroidRuntime(853): at android.os.Parcel.readException(Parcel.java:1431)
05-07 20:34:39.197: E/AndroidRuntime(853): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185)
05-07 20:34:39.197: E/AndroidRuntime(853): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
05-07 20:34:39.197: E/AndroidRuntime(853): at android.content.ContentProviderProxy.insert(ContentProviderNative.java:420)
05-07 20:34:39.197: E/AndroidRuntime(853): at android.content.ContentResolver.insert(ContentResolver.java:866)
05-07 20:34:39.197: E/AndroidRuntime(853): at com.protextyou.contacts.ContactHandler.addContact(ContactHandler.java:58)
05-07 20:34:39.197: E/AndroidRuntime(853): at com.protextyou.StartPage$12.onClick(StartPage.java:542)
05-07 20:34:39.197: E/AndroidRuntime(853): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
05-07 20:34:39.197: E/AndroidRuntime(853): at android.os.Handler.dispatchMessage(Handler.java:99)
05-07 20:34:39.197: E/AndroidRuntime(853): at android.os.Looper.loop(Looper.java:137)
05-07 20:34:39.197: E/AndroidRuntime(853): at android.app.ActivityThread.main(ActivityThread.java:5041)
05-07 20:34:39.197: E/AndroidRuntime(853): at java.lang.reflect.Method.invokeNative(Native Method)
05-07 20:34:39.197: E/AndroidRuntime(853): at java.lang.reflect.Method.invoke(Method.java:511)
05-07 20:34:39.197: E/AndroidRuntime(853): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-07 20:34:39.197: E/AndroidRuntime(853): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-07 20:34:39.197: E/AndroidRuntime(853): at dalvik.system.NativeStart.main(Native Method)
Если он падает, в журнале должна быть трассировка стека. Отправьте лог-код. –
Er, я не совсем уверен, какую часть выставить. В лог-кадре появляется куча ошибок, поэтому вот несколько лучших: '05-07 09: 07: 02.334: E/Trace (3052): файл с открытием ошибки: нет такого файла или каталога (2)' ' 05-07 09: 07: 21.483: E/AndroidRuntime (3052): FATAL EXCEPTION: main' '05-07 09: 07: 21.483: E/AndroidRuntime (3052): java.lang.NullPointerException' ' 05-07 09: 07: 21.483: E/AndroidRuntime (3052): \t at android.os.Parcel.readException (Parcel.java:1431) ' ' 05-07 09: 07: 21.483: E/AndroidRuntime (3052): \t at android.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils.java:185) ' – Cheddar
является частью публикации« NullPointerException ». Измените свой вопрос и добавьте трассировку _full_ стека, а не только первые две строки. –