联系方式无法更新

时间:2013-08-06 03:34:28

标签: android

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

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();

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分:0)

通过此链接,它将解释ContactContract的工作原理

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

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

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

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

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

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

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