如何在以编程方式将 newInsert 插入地址簿后获取最后插入的 RawContacts ID?

Posted

技术标签:

【中文标题】如何在以编程方式将 newInsert 插入地址簿后获取最后插入的 RawContacts ID?【英文标题】:How to get last inserted RawContacts ID after newInsert into address book programactically? 【发布时间】:2011-12-16 04:50:23 【问题描述】:

我已成功将联系人插入通讯录,我需要在我的应用中保存联系人的引用。我认为保存引用的最佳方法是获取 RawContacts ID 本身。

有没有办法让我在插入新联系人后直接从通讯录中取回 ID?还是我必须取出每条记录并将它们与我的数据进行比较才能获得 RawContacts ID?

我使用此代码进行插入:

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
int rawContactInsertIndex = ops.size();
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
    .withValue(RawContacts.ACCOUNT_TYPE, null)
    .withValue(RawContacts.ACCOUNT_NAME, null)
    .withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DISABLED)
    .build());

我感谢任何输入,无论是解决方法还是来自 API。谢谢!

【问题讨论】:

【参考方案1】:

您可以使用从 getContentResolver() 返回的信息(无论如何您都必须调用它才能将操作添加到数据库。 getContentResolver() 需要有一个 try,catch 环境。

...
ContentProviderResult[] res = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
...
Uri myContactUri = res[0].uri;
int lastSlash = myContactUri.toString().lastIndexOf("/");
int length = myContactUri.toString().length();
int contactID = Integer.parseInt((String) myContactUri.toString().subSequence(lastSlash+1, length));

【讨论】:

不错!直奔主题,没有麻烦。谢谢您的帮助。 =D

以上是关于如何在以编程方式将 newInsert 插入地址簿后获取最后插入的 RawContacts ID?的主要内容,如果未能解决你的问题,请参考以下文章

如何在以编程方式创建的 UIPicker Delegate 中返回选定的值

如何在以编程方式制作滚动视图时解决此问题?

如何在以编程方式创建实体时设置 NSManagedObjectModel 的配置。

如何使用 XCTest 在以编程方式添加的 UIView 上测试 UILabel

IOS5 - 如何在以编程方式创建的视图中播放视频?

如何在以编程方式创建的 UIButton 上添加 padding-left?