2

以下代码用于更新联系人。我能够更新电话号码字段,但我正在尝试更新联系人姓名(在评论行内),但我无法理解代码,谁能帮我解决这个问题。

String new_phoneNumber = update_phonenumber.getText()
                    .toString();
String new_name = update_name.getText().toString();
ContentResolver cr = getContentResolver();

String where = ContactsContract.Data.DISPLAY_NAME
                    + " = ? AND "
                    + ContactsContract.Data.MIMETYPE
                    + " = ? AND "
                    + String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE)
                    + " = ? ";
String[] params = new String[] {
                    get_name,
                    ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
                    String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) };

 Cursor phoneCur = managedQuery(
                    ContactsContract.Data.CONTENT_URI, null, where, params,
                    null);
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

            if ((null == phoneCur)) {
                Toast.makeText(getApplicationContext(), "Empty Contact",
                        Toast.LENGTH_LONG).show();
            } else {
                ops.add(ContentProviderOperation
                        .newUpdate(ContactsContract.Data.CONTENT_URI)
                        .withSelection(where, params)
            .withValue(
                                ContactsContract.CommonDataKinds.Phone.DATA,
                                new_phoneNumber)/***.withValue(
                                ContactsContract.CommonDataKinds.Phone.DATA,
                                new_name)***/
                        .build());
            }

            phoneCur.close();

            try {
                cr.applyBatch(ContactsContract.AUTHORITY, ops);
            } catch (RemoteException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (OperationApplicationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            Toast.makeText(getApplicationContext(), "Successfully updated",
                    Toast.LENGTH_LONG).show();
4

2 回答 2

2

您可以在代码中添加另一个 ops.add 并插入以下代码。

ops.add(ContentProviderOperation
                    .newUpdate(ContactsContract.Data.CONTENT_URI)
                    .withSelection(Data.DATA1 + "=?", new String[] {get_name})
                    .withValue(
                            StructuredName.DISPLAY_NAME,
                            new_name)
                    .build());
于 2013-08-06T14:18:26.107 回答
0

参考此链接,它将解释 ContactContract 的工作原理

http://developer.android.com/guide/topics/providers/contacts-provider.html

每个字段(电子邮件、姓名、地址)都有其 on mime 类型,您应该使用它来更新字段。

例如,让我们尝试更新电子邮件。

首先,您应该找到要更新的详细信息。我们将使用 Data 表,其中每个 Data.RAW_CONTACT_ID 代表有关某些联系人的详细信息。

因此,我们需要找到 Data.RAW_CONTACT_ID,其中 id 是您要编辑的联系人的 id。

现在我们需要找到电子邮件 (Email.CONTENT_ITEM_TYPE) 的 mime-type(代表详细信息的特定行)。

电子邮件的数据存储在 Email.DATA 列中 - 我们将新电子邮件放在那里。然后我们构建一个查询并最终应用更改。

于 2013-08-06T04:18:52.137 回答