2014-02-14 4 views
0

일괄 적으로 연락처를 연락처에 추가하려고합니다. 일괄 처리 목록에 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()); 

답변

0

해결했습니다.

첫 번째 작업에는 별표가 있어야합니다.

이 같이

:

operations.add(ContentProviderOperation.newInsert(
          ContactsContract.RawContacts.CONTENT_URI) 
          .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 
          .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) 
          .withValue(RawContacts.STARRED, strStarred) 
          .build()); 

그리고이 제거 : (주연 == true)가 {

operations.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
       .withValueBackReference(RawContacts._ID, 0) 
       .withValue(RawContacts.STARRED, "1") 
       .build()); 
} 
0

그것이 PRIMARY KEY must be unique을 말한다 로그인합니다.

여기에 기본 키가 무엇입니까? 실제로 그것이 고유 한 것이 확실합니까?

+0

가 편집 된 질문을 확인하면

, 기본 키가로 전달되어야한다 'withValueBackReference'에 대한 refrence를 설명하고 있습니다. – dazito