일괄 적으로 연락처를 연락처에 추가하려고합니다. 일괄 처리 목록에 Starred
필드를 추가 할 때를 제외하고 성공적으로 수행 할 수 있습니다. 문제는 거기에 있어야합니다.account_id = 2 contact_id = null _id = 824 별표 = 1 - 연락처 추가 일괄 처리 - Android
다음은 Starred
필드의 ArrayList 코드입니다.
if(starred == true)
{
operations.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValueBackReference(RawContacts._ID, 0)
.withValue(RawContacts.STARRED, "1")
.build());
}
그리고 나중에 I에
는 수행 여기final ContentProviderResult[] result = contentResolver.applyBatch(ContactsContract.AUTHORITY, operations);
if(result.length == operations.size())
{
Log.d(TAG, "Contact added!");
}
가 발생하는 예외입니다. 나는 예외를 이해하지만 ops.add(...)
에서 어떤 일이 일어나고 있는지 알지 못한다. 그러나 확실한 것은있다. 나는 그것을 찾을 수 없다.
02-14 00:05:54.675: E/SQLiteDatabase(1508): Error inserting account_id=2 contact_id=null _id=824 starred=1
02-14 00:05:54.675: E/SQLiteDatabase(1508): android.database.sqlite.SQLiteConstraintException: PRIMARY KEY must be unique (code 19)
02-14 00:05:54.675: E/SQLiteDatabase(1508): at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
02-14 00:05:54.675: E/SQLiteDatabase(1508): at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:782)
02-14 00:05:54.675: E/SQLiteDatabase(1508): at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
02-14 00:05:54.675: E/SQLiteDatabase(1508): at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
02-14 00:05:54.675: E/SQLiteDatabase(1508): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469)
02-14 00:05:54.675: E/SQLiteDatabase(1508): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
02-14 00:05:54.675: E/SQLiteDatabase(1508): at com.android.providers.contacts.ContactsProvider2.insertRawContact(ContactsProvider2.java:2661)
02-14 00:05:54.675: E/SQLiteDatabase(1508): at com.android.providers.contacts.ContactsProvider2.insertInTransaction(ContactsProvider2.java:2450)
02-14 00:05:54.675: E/SQLiteDatabase(1508): at com.android.providers.contacts.AbstractContactsProvider.insert(AbstractContactsProvider.java:136)
02-14 00:05:54.675: E/SQLiteDatabase(1508): at com.android.providers.contacts.ContactsProvider2.insert(ContactsProvider2.java:2089)
02-14 00:05:54.675: E/SQLiteDatabase(1508): at android.content.ContentProviderOperation.apply(ContentProviderOperation.java:214)
02-14 00:05:54.675: E/SQLiteDatabase(1508): at com.android.providers.contacts.AbstractContactsProvider.applyBatch(AbstractContactsProvider.java:237)
02-14 00:05:54.675: E/SQLiteDatabase(1508): at com.android.providers.contacts.ContactsProvider2.applyBatch(ContactsProvider2.java:2225)
02-14 00:05:54.675: E/SQLiteDatabase(1508): at android.content.ContentProvider$Transport.applyBatch(ContentProvider.java:260)
02-14 00:05:54.675: E/SQLiteDatabase(1508): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:185)
02-14 00:05:54.675: E/SQLiteDatabase(1508): at android.os.Binder.execTransact(Binder.java:404)
02-14 00:05:54.675: E/SQLiteDatabase(1508): at dalvik.system.NativeStart.run(Native Method)
02-14 00:05:54.734: W/ContactsDatabaseHelper(1508): invalidateAllCache: [ContactsDatabaseHelper]
02-14 00:05:54.742: E/DatabaseUtils(1508): Writing exception to parcel
02-14 00:05:54.742: E/DatabaseUtils(1508): android.content.OperationApplicationException: insert failed
02-14 00:05:54.742: E/DatabaseUtils(1508): at android.content.ContentProviderOperation.apply(ContentProviderOperation.java:216)
02-14 00:05:54.742: E/DatabaseUtils(1508): at com.android.providers.contacts.AbstractContactsProvider.applyBatch(AbstractContactsProvider.java:237)
02-14 00:05:54.742: E/DatabaseUtils(1508): at com.android.providers.contacts.ContactsProvider2.applyBatch(ContactsProvider2.java:2225)
02-14 00:05:54.742: E/DatabaseUtils(1508): at android.content.ContentProvider$Transport.applyBatch(ContentProvider.java:260)
02-14 00:05:54.742: E/DatabaseUtils(1508): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:185)
02-14 00:05:54.742: E/DatabaseUtils(1508): at android.os.Binder.execTransact(Binder.java:404)
02-14 00:05:54.742: E/DatabaseUtils(1508): at dalvik.system.NativeStart.run(Native Method)
편집 :
이것은 ArrayList
에 처음 삽입입니다 : 당신의 오류의 두 번째 줄에
operations.add(ContentProviderOperation.newInsert(
ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build());
가 편집 된 질문을 확인하면
가, 기본 키가로 전달되어야한다 'withValueBackReference'에 대한 refrence를 설명하고 있습니다. – dazito