2011-12-28 4 views
2

Android 연락처 데이터베이스에 연락처를 삽입하려고합니다. 몇 가지 자습서 (완전히 이해하지 못함)를 발견했으며, 기본적으로 Android SDK의 "ContactManager"샘플 코드의 메소드를 복사했습니다.Android 전화 번호부에 연락처 삽입

나는 새로운 원료 연락처를 추가하려면이 방법을 사용하십시오

public void createContact(String name, String phone, String mobile, String email) { 
ContentResolver cr = mContext.getContentResolver(); 
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
     .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, mAccount.type) 
     .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, mAccount.name).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.DISPLAY_NAME, name) 
     .build()); 
ops.add(ContentProviderOperation 
     .newInsert(ContactsContract.Data.CONTENT_URI) 
     .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
     .withValue(ContactsContract.Data.MIMETYPE, 
       ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.Phone.DATA10, phone) 
     .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, 
       ContactsContract.CommonDataKinds.Phone.TYPE_WORK).build()); 
ops.add(ContentProviderOperation 
     .newInsert(ContactsContract.Data.CONTENT_URI) 
     .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
     .withValue(ContactsContract.Data.MIMETYPE, 
       ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.Phone.DATA11, mobile) 
     .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, 
       ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE).build()); 
ops.add(ContentProviderOperation 
     .newInsert(ContactsContract.Groups.CONTENT_URI) 
     .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
     .withValue(ContactsContract.Data.MIMETYPE, 
       ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.Email.DATA, email) 
     .withValue(ContactsContract.CommonDataKinds.Email.TYPE, 
        ContactsContract.CommonDataKinds.Email.TYPE_WORK).build()); 

당신은 내가, 사무실 번호와 모바일 (나중에 별도의 지정된 이름과 성을 삽입합니다)의 이름을 삽입하려고 볼 수 있듯이 전화 번호 및 이메일. 더러운 = 1 마임 = vnd.android.cursor.item/email_v2 데이터 2 = 2 [email protected] ACCOUNT_TYPE = VND를 삽입

오류 : 나는이 코드를 실행하면

, 나는이 오류를 얻을 수 .sec.contact.phone account_name = vnd.sec.contact.phone raw_contact_id = 2 android.database.sqlite.SQLiteException : 테이블 그룹에는 mimetype :이라는 열이 없습니다. 컴파일하는 동안 : INSERT INTO 그룹 (dirty, mimetype, data2, data1 , account_type, account_name, raw_contact_id) VALUES (?,?,?,?,?,?,?);

왜 나는 그 이유를 이해하지 못하더라도 일부 데이터를 그룹 데이터베이스에 삽입하는 것처럼 보입니다.

ContactManager 샘플 앱을 실행할 때이 앱을 사용하여 추가 한 연락처가 Android 전화 번호부에 표시되지 않는다는 점만 제외하면 제대로 작동합니다. 어떤 이유로 든 보이지 않음으로 태그되었습니다.

누가 무슨 일이 일어나는가에 대한 단서가 있습니까?

감사합니다.

답변

4

그룹 테이블에 이메일 주소를 입력하려고하므로이 오류가 발생합니다. (URI는 ContactsContract.Data.CONTENT_URI가 아니고 ContactsContract.Groups.CONTENT_URI 여야합니다.)

+0

제 코드를 50 번 읽으십시오. 어떻게 보지 못했을까요? 나는 내일 그것을 시험 할 것이다. 그러나 당신의 대답은 정확 해 보인다! :) 감사! –

+0

그것은 작동합니다! 다시 감사합니다 :) –

관련 문제