更新时将联系人的姓名相乘(内容提供程序操作)



一个非常奇怪的孔隙。我正在根据以下规则更新联系人名称: - 如果联系人的名称以" BIT" SPACE(" BIT")开头,则 ->将联系人的名称更新为name.substring(4,name.length()),这意味着联系人名称将无需更新少量 "。

当我使用name.substring从数字降低4(我认为直到接触名称的空间为止)时。当我从4个字符开始时,触点的名称乘以。对于exmaple,当我使用name = name.substring(4,name.length())时,名称等于" bit lili"其更新至:Lili Lili。

 private void updateContact(String name) {
    ContentResolver cr = getContentResolver();
    String where = ContactsContract.Data.DISPLAY_NAME + " = ?";
    String[] params = new String[] {name};
    Cursor phoneCur = managedQuery(ContactsContract.Data.CONTENT_URI,null,where,params,null);
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    if ((null == phoneCur)) {//createContact(name, phone);
        Toast.makeText(this, "no contact with this name", Toast.LENGTH_SHORT).show();
        return;} else {ops.add(ContentProviderOperation.newUpdate(android.provider.ContactsContract.Data.CONTENT_URI)
                .withSelection(where, params)
                .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name.substring(4,name.length()))
                .build());
    }
    phoneCur.close();
    try {cr.applyBatch(ContactsContract.AUTHORITY, ops);} 
    catch (RemoteException e) {e.printStackTrace();}
    catch (OperationApplicationException e) {e.printStackTrace();}}

谢谢!

不是某个答案

.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME //This specific part has a problem with the new update function
            ,name.substring(4,name.length()))

所以我的修复建议是将其更改为姓氏,并根据需要删除给定名称的问题而将其更改为您的需要,因此这是一个解决方案

 public static boolean updateContactName(@NonNull Context context, @NonNull String name) {
    if (name.length() < 4) return true;
    String givenNameKey = ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME;
    String familyNameKey = ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME;
    String changedName = name.substring(4, name.length());
    ArrayList<ContentProviderOperation> ops = new ArrayList<>();
    String where = ContactsContract.Data.DISPLAY_NAME + " = ?";
    String[] params = new String[]{name};
    ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
            .withSelection(where, params)
            .withValue(givenNameKey, changedName)
            .withValue(familyNameKey, "")
            .build());
    try {
        context.getContentResolver()
                .applyBatch(ContactsContract.AUTHORITY, ops);
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
    return true;
}

最新更新