2

Android의 내부 데이터베이스 테이블 ContactsContract에서 항목을 삭제하려고합니다. 즉, 생일과 같은 일정을 연락처의 항목에서 삭제해야합니다.Android에서 ContactsContract를 사용할 때 "SQLiteException : 해당 열 없음 : mimetype"

다음 코드는 제대로 작동하지만 일부 사용자 (약 1 %)가 SQLException과 충돌합니다. 내 코드에 문제가 있습니까? 아니면 Android의 ContactsContract을 올바르게 지원하지 않는 것입니까? 슬로우됩니다

try { 
    ArrayList<Long> rawContactIDs = getRawContactID(o.getID()); 
    int rawContactCount = rawContactIDs.size(); 
    for (int r = 0; r < rawContactCount; r++) { 
     long rawContactID = rawContactIDs.get(r); 
     String where = ContactsContract.Data.MIMETYPE+" = ? AND "+ContactsContract.Data.RAW_CONTACT_ID+" = ? AND "+ContactsContract.CommonDataKinds.Event.TYPE+" = ?"; 
     String[] selection = new String[] { ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE, String.valueOf(MY_RAW_CONTACT_ID), String.valueOf(ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY) }; 
     getContentResolver().delete(ContactsContract.Data.CONTENT_URI, where, selection); 
    } 
} 
catch (Exception e) {} 

예외는 다음과 같습니다

android.database.sqlite.SQLiteException: no such column: mimetype: , while 
compiling: DELETE FROM data WHERE mimetype = ? AND raw_contact_id = ? AND 
data2 = ? 
at 
android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:158) 
at 
android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114) 
at 
android.content.ContentProviderProxy.delete(ContentProviderNative.java:472) 
at android.content.ContentResolver.delete(ContentResolver.java:700) 
at ... MY_ACTIVITY ... 
+0

이 예외가 발생하는 장치에 대한 패턴은 무엇입니까? – CommonsWare

+0

특정한 경우에있어서 더 밝고/HW-T18입니다. – caw

+1

주류 장치에서이 장치가 보이지 않는 경우 (개인적으로이 장치에 대해 들어 보지 못했습니다), 장치를 망가 뜨린 채로 장치를 분필 할 것입니다. – CommonsWare

답변

1

장치 제조업체는 AOSP와 함께 제공되는 ContentProvider의 구현을 변경할 수 있습니다. 이론적으로 이러한 변경 사항은 CTS (호환성 테스트 제품군)에 의해 포착되므로 API를 중단하지 않는 기기 만 Play 스토어를 통해 배송 될 때 앱을 실행할 수 있습니다.

말했다되고 그건

...

  • CTS는 당신이 의도적으로 Play 스토어를 넘어 귀하의 응용 프로그램을 배포 할 경우 CTS 당신을 보호하지 않습니다까지 완료
  • 에서, 그리고 호환되지 않는 장치에 누군가가 당신을 실행 당신이 실수로 호환되지 않는 장치를 사용하여 Play 스토어를 넘어 응용 프로그램 (즉,이 앱이 불법 복제 된 것), 누군가를 배포 경우 CTS 당신을 보호하지 않는 응용 프로그램
  • 앱 실행
  • 버지니아 당신이 내에서 발생하는 나타나는 문제를 볼 때 rious 장치 제조업체는 플레이 스토어 앱 자체 그래서

해적 운영체제가 제공하는 ContentProvider, 그러나 그 문제는 드물게 및/또는 인식 장치에있는,하지 공포. 이 경우에는 실패한 호출을 자신의 예외 처리기에서 래핑하여 계속 실패 할 수도 있지만 실제로 코드가 어려움의 원천은 아닙니다.

+0

감사합니다. 많이, 이것은 매우 원인 일 가능성이 큽니다! – caw

1

ContactsContract API 레벨 5.이 가능하기 때문에 사용할 수있다이 문제를보고 사용자는 < 레벨 5 (도넛, 컵 케이크)?

+0

아니요, 앱이 API 레벨이> = 8 인 사용자 만 사용할 수 있습니다. – caw

관련 문제