2011-12-28 146 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的mimetype = vnd.android.cursor.item/email_v2 DATA2 = 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次我怎麼看不到這個!我明天會測試它,但你的答案似乎正確! :) 謝謝! – 2011-12-29 18:30:24

+0

它的工作原理!再次感謝你 :) – 2011-12-30 10:16:43

相關問題