2013-02-08 3 views
0

Android 용 백업 응용 프로그램 (주로 연락처 및 SMS 메시지)을 개발 중입니다. 백업은 문제가되지 않지만 연락처를 Android 데이터베이스에 다시 쓰는 것은 문제가됩니다.Android에 연락처 삽입

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
    .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 
    .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) 
    .build()); 

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
    .withValueBackReference(Data.RAW_CONTACT_ID, 1) 
    .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) 
    .withValue(StructuredName.GIVEN_NAME, "Joe") 
    .withValue(StructuredName.FAMILY_NAME, "Bloggs") 
    .build()); 

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
    .withValueBackReference(Data.RAW_CONTACT_ID,1) 
    .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 
    .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "086555555") 
    .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) 
    .build()); 

try{ 
    ctx.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
}catch(Exception e){ 
    e.printStackTrace(); 
} 

모두가 RAW_CONTACT_ID에 달려 같다 :

이것은 내가 지금까지있는 것입니다. 처음에는 연락처가없는 에뮬레이터를 사용하고 있습니다. 첫 번째 연락처 생성 (RAW_CONTACT_ID = 0)에서 작동하지만 RAW_CONTACT_ID가 1 이상인 초기 연락처 다음에 연락처가 생성 된 것 같지 않습니다. 아무도 이런 경우에 어떤 아이디어가 있습니까? 내가 무슨 짓을

+0

이 많은 도움이 아닌 것 : 당신이 얻는 대신에 정확한 값을 넣어 않는 이유 백업 연락처에서 모든 키 및 값 (일명 contentValues)을 의미합니까? 이렇게하면 필수 입력란을 놓치지 않습니다 ... –

답변

1

은 내가 먼저 내 연락처를 만든 다음 그 새로 만든 연락처의 ID를 잡고 그 ID 여기

내 프리스트 단계는, 새 연락처를 만든 다음 발견되는 모든 다른 연락처를 추가했다

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
     ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
       .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 
       .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) 
       .build()); 
     ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
       .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
       .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
       .withValue(ContactsContract.CommonDataKinds.StructuredName.PREFIX, prefix) 
       .withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, givenName) 
       .withValue(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME, middleName) 
       .withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, familyName) 
       .withValue(ContactsContract.CommonDataKinds.StructuredName.SUFFIX, suffix) 
       .build()); 

     resolver.applyBatch(ContactsContract.AUTHORITY, ops); 

     Cursor cursor = null; 
     try 
     { 
      cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI, baseProjection, ContactsContract.Contacts.DISPLAY_NAME + " = ? ", new String[] {displayname}, __DEFAULT_SORT_ORDER); 

      if (cursor.moveToFirst()) 
      { 
       String val; 
       val = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
       return val; 
      } 
     } 
... 

그럼 내가 접촉 모든 세부 사항을 추가

해당 연락처의 ID는 I는 다음과 같이합니다 :

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
       ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
         .withValue(ContactsContract.Data.CONTACT_ID, contactId) 
         .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) 
         .withValue(ContactsContract.Data.DATA5, poBox) 
         .withValue(ContactsContract.Data.DATA4, street) 
         .withValue(ContactsContract.Data.DATA7, city) 
         .withValue(ContactsContract.Data.DATA8, region) 
         .withValue(ContactsContract.Data.DATA9, postCode) 
         .withValue(ContactsContract.Data.DATA10, country) 
         .withValue(ContactsContract.Data.DATA2, type) 
         .withValue(ContactsContract.Data.DATA3, label) 
         .build()); 
관련 문제