首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >以编程方式将新的Android联系人插入手机

以编程方式将新的Android联系人插入手机
EN

Stack Overflow用户
提问于 2013-05-07 16:16:55
回答 2查看 33.9K关注 0票数 23

我正在写一个应用程序,让用户从他们的Android设备删除联系人,并将他们存储在一个单独的数据库中。他们也应该能够恢复联系人到他们的手机,但我在这一部分有问题。我从数据库中检索联系人信息,并创建一个contact对象,其中包含联系人ID、查找键、结构化名称、组织、phone对象的数组列表(其中包含电话号码和类型)等。我将这些信息恢复到手机上的函数如下:

代码语言:javascript
复制
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);
}

这就是应用程序崩溃的地方。我使用此方法将数据插入到我的数据库中,没有出现任何问题,并且我可以验证数据是否被正确存储。所以我的猜测是,有一种比这更好的方法将联系人插入到设备中,但我不知道会是什么。有没有人能给我举个例子,以编程方式创建联系人并将其插入到用户的设备中?即使我可以看到一个只有一个显示名称的联系人被创建,我也会感到满意。

如果这很重要,我还尝试将此代码放在插入结构化名称的上方,但无济于事:

代码语言:javascript
复制
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();

编辑:这是我的应用崩溃时的logcat错误日志:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-07 16:24:29

Reference

代码语言:javascript
复制
ContentValues values = new ContentValues();
            values.put(Data.RAW_CONTACT_ID, 001);
            values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
            values.put(Phone.NUMBER, "1-800-GOOG-411");
            values.put(Phone.TYPE, Phone.TYPE_CUSTOM);
            values.put(Phone.LABEL, "Nirav");
            Uri dataUri = getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);

使用上面的代码。http://developer.android.com/reference/android/provider/ContactsContract.Data.html

票数 19
EN

Stack Overflow用户

发布于 2013-11-04 17:28:08

代码语言:javascript
复制
ArrayList<ContentProviderOperation> ops =
      new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
      .withValue(Data.RAW_CONTACT_ID, rawContactId)
      .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
      .withValue(Phone.NUMBER, "1-800-GOOG-411")
      .withValue(Phone.TYPE, Phone.TYPE_CUSTOM)
      .withValue(Phone.LABEL, "free directory assistance")
      .build()); 
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16414351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档