更新联系方式android

时间:2012-02-17 09:50:26

标签: android

我正在处理我想要更新特定人员联系的应用程序。当我更新只联系姓名,然后它工作正常,但我想更新联系人的全部细节,如电子邮件地址,号码,邮政地址等。

请提供一些有用的链接。提前谢谢。

1 个答案:

答案 0 :(得分:3)

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

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

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

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

现在我们需要找到mimetype(代表细节的特定行) 电子邮件(Email.CONTENT_ITEM_TYPE)。

电子邮件的数据存储在Email.DATA列中 - 我们在那里放了新电子邮件。

如果您想要特定的电子邮件类型,则应将其添加到查询中: 例如,如果要添加主电子邮件,则应添加Email.TYPE_HOME 查询。

然后我们构建一个查询并最终应用更改。

这是一个考试:

    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

    String emailParams = Data.RAW_CONTACT_ID + " = ? AND " + Data.MIMETYPE + " = ?";
    String[] emailParamsWhere = new String[] { "contact_id", Email.CONTENT_ITEM_TYPE };

    ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI).withSelection(emailParams, emailParamsWhere).withValue(Email.DATA, "new email").withValue(Email.TYPE, Email.TYPE_HOME) 
            .build());

    try
    {
        ContentProviderResult[] res = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

        if (res != null)
        {
            return true;
        }

        return false;
    }

    catch (RemoteException e)
    {
        Log.d(TAG, e.getMessage());
        e.printStackTrace();
    }

    catch (OperationApplicationException e)
    {
        Log.d(TAG, e.getMessage());
        e.printStackTrace();
    }

要更新手机,请使用以下查询:

        String phoneParams = Data.RAW_CONTACT_ID + " = ? AND " + Data.MIMETYPE + " = ? AND " + Phone.TYPE + " = " + Phone.TYPE_MOBILE;
        String[] phoneParamsWhere = new String[] { "contact_id", Phone.CONTENT_ITEM_TYPE };

        ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI).withSelection(phoneParams, phoneParamsWhere).withValue(Phone.NUMBER, "mobile_number")
                .withValue(Phone.TYPE, Phone.TYPE_MOBILE).build());

希望我帮助