如何更新联系人的显示名称?下面代码中的操作在没有抛出任何东西的情况下完成,并且似乎可以正常工作 - 也就是说,当我重新查询 ContactsContract.Contact 表时,返回一行并更改了名称。但是,当我尝试在平板电脑上运行股票“人”应用程序时,它崩溃了。显然我做错了什么。
这是代码。早期,它从聚合联系人中获取一个 id,如下所示,其中key是 lookup_key:
String[] projection = new String[] {
Contacts._ID, // 0
Contacts.DISPLAY_NAME, // 1
};
Uri uri = Uri.parse (Contacts.CONTENT_LOOKUP_URI + "/" + key);
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query (uri, projection, null, null, null);
if (!cursor.moveToNext()) // move to first (and only) row.
throw new IllegalStateException ("contact no longer exists for key");
origId = cursor.getLong(0);
cursor.close();
然后,在用户完成编辑后,我调用这段代码来更新 display_name:
ArrayList<ContentProviderOperation> opers = new ArrayList<ContentProviderOperation>();
ContentProviderOperation.Builder builder = null;
String[] args = { Long.toString (origId) };
builder = ContentProviderOperation.newUpdate (Data.CONTENT_URI);
builder.withSelection (RawContacts.CONTACT_ID + "=?", args);
builder.withValue(CommonDataKinds.StructuredName.DISPLAY_NAME, name);
opers.add(builder.build());
ContentProviderResult[] results = null;
try {
results = getContentResolver().applyBatch(ContactsContract.AUTHORITY, opers);
} catch ...
我意识到我不需要 ContentProviderOperation 这个例子;那是为了以后我有更多东西要更新的时候。
老实说,我对自己实际使用的 ID 感到很困惑。这些名称对我来说不是很清楚,我可能为此操作使用了错误的 ID。
对于它的价值,在更新后查看结果我看到结果代码为 5。我找不到任何文档,所以不知道这是否重要。