android - 修改Android中已有的联系人

标签 android android-contentprovider android-contacts

我正在尝试通过我的应用程序编辑电话联系人。我想编辑“姓名、电话号码、电子邮件”。我可以编辑号码和电子邮件。但是当我尝试编辑名称时,它没有在编辑

我的代码如下

ContentResolver contentResolver  = getActivity().getContentResolver();

String where = ContactsContract.Data.CONTACT_ID + " = ? AND " +  ContactsContract.Data.MIMETYPE + " = ?";

 String[] emailParams = new String[]{ContactId, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE};
 String[] nameParams = new String[]{ContactId, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE};
 String[] numberParams = new String[]{ContactId, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE};

 ArrayList<android.content.ContentProviderOperation> ops = new ArrayList<android.content.ContentProviderOperation>();

 if(!email.equals("") &&!name.equals("")&& !number.equals(""))
  {
   ops.add(android.content.ContentProviderOperation.newUpdate(android.provider.ContactsContract.Data.CONTENT_URI)
        .withSelection(where,emailParams)
        .withValue(ContactsContract.CommonDataKinds.Email.DATA, email)
        .build());

   ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
        .withSelection(ContactsContract.CommonDataKinds.Phone._ID + " = ?", new String[] {ContactId})
        .withValue(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, name)
        .build());

     ops.add(android.content.ContentProviderOperation.newUpdate(android.provider.ContactsContract.Data.CONTENT_URI)
        .withSelection(where,numberParams)
        .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, number)
        .build());

    getActivity().getApplicationContext().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
    Toast.makeText(getActivity(), "Contact is successfully edited", Toast.LENGTH_SHORT).show();
  }

谁能告诉我为什么名字没有被编辑

提前致谢:)

最佳答案

你的选择有误

withSelection(ContactsContract.CommonDataKinds.Phone._ID + " = ?", new String[] {ContactId})

Phone._ID 不是 contactId - 它是 Data._ID

您正确定义了 nameParams,但出于某种原因我发现您没有使用它们。

改用下面

.withSelection(where,nameParams )

使用与号码和电子邮件相同的选择。

关于android - 修改Android中已有的联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33476993/

相关文章:

java - 避免索引越界异常

android - 为Ok6410板编译android内核

android - 连字符是使用部分电话号码获取联系方式的问题

android - 人们如何在 Sync Adapter 和 Firebase for Android App 之间做出选择

android - 如何将联系人详细信息存储为类变量android

android - 如何在 android 中检索最近使用的联系人?

java - 无法修复 android.content.res.Resources$NotFoundException

android - 绘制自定义形状

android - IntentService 和 CursorLoader 同步问题

android - 如何将数组列表与移动联系人进行比较