2011-12-03 2 views
2

연락처에 SMS를 보내는 데 도움이되는 앱 개발 중입니다. "직장"또는 "비공개"와 같은 연락처에 "사용자 정의 필드 번호"를 추가해야한다는 것을 제외하고는 모든 것이 훌륭합니다. 나는 웹에서 해답을 찾고, evryone에 유용한 것은 나를 찾지 않을 것이다. 이건 내 코드입니다 :연락처에 맞춤형 번호 추가 [Android]

private void AddCtxtAttribute(int contactID, String contactNumber) { 

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

    ContentProviderOperation.Builder builder = ContentProviderOperation 
      .newInsert(Data.CONTENT_URI); 

    builder.withValue(Data.RAW_CONTACT_ID, contactID); 
    builder.withValue(ContactsContract.Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); 
    builder.withValue(ContactsContract.Data.DATA1, contactNumber); 
    builder.withValue(ContactsContract.Data.DATA2, Phone.TYPE_CUSTOM); 
    builder.withValue(ContactsContract.Data.DATA3, "My Custom Label"); 

    ops.add(builder.build()); 

    try { 
     getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
     Log.e("RESULT", "Success! " + contactID + " - " 
       + contactNumber); 
    } catch (RemoteException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     Log.e("ERROR", "error : " + e.toString()); 
    } catch (OperationApplicationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     Log.e("ERROR", "error : " + e.toString()); 
    } 

} 

그리고 그것은라고 :

contacto_id와 contacto_numero가 INT 각각 문자열입니다
AddCtxtAttribute(contacto_id, contacto_numero); 

.

버튼을 눌렀을 때 해당 연락처의 ID (contacto_id)가 있지만 다른 연락처가 업데이트되는 것이 문제입니다. (같은 id의 일치하지 않는)하지만 그것을 디버깅했습니다 및 id 변경되지 않습니다.

아무도 도와 줄 수 있습니까?

답변

2

나는 그것을 알아 냈다!

문제는 연락처를 읽고 새 연락처 번호를 삽입 할 때 다른 열 이름과 URL을 사용하고 있다는 것이 었습니다.

나는이 한 : 모든 연락처 쿼리 을 :

private void llenar_contactos() { 

    ProgressDialog progress; 
    lista_contactos_cel_sobrantes = null; 

    sobrantes = false; 

    lista_contactos_cel = new ArrayList<HashMap<String, Object>>(); 

    progress = ProgressDialog.show(contactsActivity.this, "", 
      "Cargando Contactos. Porfavor espere..."); 

    String[] projection = new String[] { Data.RAW_CONTACT_ID, 
      Phone.DISPLAY_NAME, Phone.NUMBER, Phone.LABEL }; 

    String selection = Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'"; 

    // ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER + "='1'"; 
    String sort_order = "display_name ASC"; 

    Uri mContacts = Data.CONTENT_URI; 
    // ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 

    Cursor contacts = getContentResolver().query(mContacts, // Contact URI 
      projection, // Which columns to return 
      selection, // Which rows to return 
      null, // Where clause parameters 
      sort_order // Order by clause 
      ); 

    total_contactos = contacts.getCount(); 

    if (total_contactos > 0) { 

     int i = 0; 

     int multiplo = 0; 
     int indice_total = 0; 

     int temp_registros = 0; 

     String contact_id = ""; 
     String name = ""; 
     String phoneNo = ""; 
     String label = ""; 
     sobrantes = false; 

     int nameFieldColumnIndex = 0; 

     while (contacts.moveToNext()) { 
      nameFieldColumnIndex = contacts.getColumnIndex(Data.RAW_CONTACT_ID); 

      if (nameFieldColumnIndex > -1) { 
       contact_id = contacts.getString(nameFieldColumnIndex); 
      } 

      nameFieldColumnIndex = contacts.getColumnIndex(Phone.DISPLAY_NAME); 

      if (nameFieldColumnIndex > -1) { 
       name = contacts.getString(nameFieldColumnIndex); 
      } 

      nameFieldColumnIndex = contacts.getColumnIndex(Phone.NUMBER); 

      if (nameFieldColumnIndex > -1) { 
       phoneNo = contacts.getString(nameFieldColumnIndex); 
      } 

      nameFieldColumnIndex = contacts.getColumnIndex(Phone.LABEL); 

      if (nameFieldColumnIndex > -1) { 
       label = contacts.getString(nameFieldColumnIndex); 
      } 

      if(label != null){ 
       Log.i("CONTACTO", "id: " + contact_id + " -> name: " + name 
         + " ->number: " + phoneNo + " ->label: " + label); 
      } else { 
       Log.d("CONTACTO", "id: " + contact_id + " -> name: " + name 
         + " ->number: " + phoneNo + " ->label: " + label); 
      }    


     } 
     contacts.close(); 
    } 
} 

하고 새 사용자 지정 레이블 삽입 :

private void AddCtxtAttribute(int contactID, String contactNumber) { 

    if (contactID != 0 && contactNumber != null) { 

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

    ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
       .withValue(Data.RAW_CONTACT_ID, contactID) 
       .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) 
       .withValue(Phone.NUMBER, contactNumber) 
       .withValue(Phone.TYPE, Phone.TYPE_CUSTOM) 
       .withValue(Phone.LABEL, "My Custom Label") 
       .build()); 
    try{ 
     getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);   
    } catch (RemoteException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (OperationApplicationException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }   
    } 
} 
관련 문제