我正嘗試將聯繫人插入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電話簿中,出於某種原因它們被標記爲「不可見」。
有沒有人知道發生了什麼?
謝謝!
來吧我讀了我的代碼50次我怎麼看不到這個!我明天會測試它,但你的答案似乎正確! :) 謝謝! – 2011-12-29 18:30:24
它的工作原理!再次感謝你 :) – 2011-12-30 10:16:43