7

내가 프로그래밍 연락처의 표시 이름을 수정하려고 :편집 이름/전화 번호 프로그래밍

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

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

     ContentProviderResult[] result = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
    } catch (Exception e) { 
     Log.w("UpdateContact", e.getMessage()+""); 
     for(StackTraceElement ste : e.getStackTrace()) { 
      Log.w("UpdateContact", "\t" + ste.toString()); 
     } 
     Context ctx = getApplicationContext(); 
     int duration = Toast.LENGTH_SHORT; 
     Toast toast = Toast.makeText(ctx, "Update failed", duration); 
     toast.show(); 
    } 

contact_id

코드가 잘 실행 이전 활동에 모여 ContactsContract.CommonDataKinds.Phone._ID이지만 :

  • ContentProviderResult[] 결과가 null입니다.
  • 연락처 이름이 변경되지 않습니다. ed

나는 Data.DISPLAY_NAME과 실험했지만 동일한 효과가 있습니다.

나는 설명서를 읽었지 만 http://developer.android.com/guide/topics/providers/contacts-provider.html 네이티브 인 텐트를 호출하고 싶지 않습니다.

감사합니다.

+0

정말요? 아무도 도울 수 없습니까? – androfan

답변

5

선택 사항에 mimetype을 지정해야합니다.

.withSelection(ContactsContract.CommonDataKinds.Phone._ID + "=? AND " + 
       Data.MIMETYPE + "='" + 
       ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'", 
       new String[]{contact_id}) 

아직 이해하지 못했다면, 그걸 알려주십시오. 연락처를 업데이트하는 것이 선택 인수를 올바르게 얻는 데 매우 까다로운 것으로 나타났습니다.

+0

나는 그것을 얼마 전에 알아 냈다. 그것은 단서였다. 어쨌든 고마워;). – androfan

+0

@androfan 답변을 찾은 경우 전체 코드를 게시하십시오. 감사 :) –