2017-09-06 15 views
3

非常に奇妙な問題です。 - 連絡先の名前が "bit" +スペース( "ビット")で始まる場合 - 連絡先の名前をname.substring(4、name.length())に更新する場合は、これは、連絡先の名前が「ビット」なしで更新されることを意味します。連絡先の名前を更新すると更新されます(ContentProviderOperation)

私はそれらを下げる番号からname.substringを使用すると4(私は連絡先の名前のスペースまで)と思っています。私が4文字以上使用すると、連絡先の名前が掛けられます。例として、私が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();}} 

ありがとうございます!

答えて

0

ない一定の答えが、それはあなたが持っている問題を作業すると仮定だから私の修正案は、あなたの質問に基づいて必要なように、これらを変更姓と指定した名前に変更することです

.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; 
} 
関連する問題