private fun exportToApp() { thread { var count = 0 for (contacti in contactList) { if (contacti.isChecked) { val contentResolver = getContentResolver() val contact = ContentValues().apply { put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, contacti.name) } val uri: Uri? = contentResolver.insert(ContactsContract.RawContacts.CONTENT_URI, contact) val rawContactId = uri?.lastPathSegment val phone = ContentValues().apply { put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId) put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) put(ContactsContract.CommonDataKinds.Phone.NUMBER, contacti.phone) } contentResolver.insert(ContactsContract.Data.CONTENT_URI, phone) val email = ContentValues().apply { put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId) put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE) put(ContactsContract.CommonDataKinds.Email.ADDRESS, contacti.email) } contentResolver.insert(ContactsContract.Data.CONTENT_URI, email) count++ } } runOnUiThread { Toast.makeText(this,"已导出${count}位联系人!",Toast.LENGTH_LONG).show() } } finish()}这段代码出现了java.lang.IllegalArgumentException: raw_contact_id is required错误,请分析错误原因
时间: 2024-01-03 09:03:32 浏览: 145
这个错误是因为在插入联系人信息的时候,没有正确地获取到新插入的RawContact的id。在这段代码中,我们尝试通过调用`contentResolver.insert()`方法来插入联系人信息,但是这个方法会返回新插入的记录的URI。我们需要从这个URI中提取新插入联系人的RawContact的id,然后在插入电话号码和电子邮件地址的时候使用这个id。
具体来说,我们应该在插入联系人信息之前,先插入一个空的RawContact记录,然后再根据返回的URI获取到这个记录的id。代码可以修改为以下形式:
```
val rawContact = ContentValues()
val rawContactUri = contentResolver.insert(ContactsContract.RawContacts.CONTENT_URI, rawContact)
val rawContactId = ContentUris.parseId(rawContactUri)
```
然后在插入电话号码和电子邮件地址的时候,使用这个`rawContactId`即可。
```
val phone = ContentValues().apply {
put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId)
put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
put(ContactsContract.CommonDataKinds.Phone.NUMBER, contacti.phone)
}
contentResolver.insert(ContactsContract.Data.CONTENT_URI, phone)
val email = ContentValues().apply {
put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId)
put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
put(ContactsContract.CommonDataKinds.Email.ADDRESS, contacti.email)
}
contentResolver.insert(ContactsContract.Data.CONTENT_URI, email)
```
阅读全文