나는 다음과 같이 전화에서 특정 유형의 모든 연락처를 얻으려고 :컨텐트 프로 (연락처) - 이러한 열 : metadata_dirty
Cursor cursor = context.getContentResolver().query(
ContactsContract.RawContacts.CONTENT_URI,
null,
ContactsContract.RawContacts.ACCOUNT_TYPE + "='com.whatsapp'",
null,
ContactsContract.RawContacts.CONTACT_ID + " ASC");
을하지만,이 라인은 이미 예외 (사용자 정의 ROM, 누가 던졌습니다 => 어쩌면 이것과 관련이 있나?). 한 명의 사용자 만이 오류가 발생했으며 여기에 붙어 있습니다. 해결 방법을 아는 사람이 있습니까? 연락처를 모두 조회 할 수있는 다른 방법이 있습니까?
내 예외는 다음과 같습니다 :이 사용자의 사용자 정의 ROM의 내부 버그가 같은
Exception: android.database.sqlite.SQLiteException: no such column: metadata_dirty (code 1): , while compiling:
SELECT sort_key, send_to_voicemail, pinned, display_name, metadata_dirty,
phonebook_label_alt, version, phonebook_bucket, _id, custom_ringtone,
times_contacted, account_type_and_data_set, sync4, dirty, sync2,
contact_id, raw_contact_is_user_profile, aggregation_mode, data_set,
phonebook_label, account_type, sync3, display_name_alt, phonetic_name,
last_time_contacted, display_name_source, backup_id, sort_key_alt,
phonebook_bucket_alt, deleted, starred, account_name, sync1, sourceid,
phonetic_name_style
FROM view_raw_contacts_restricted AS view_raw_contacts
WHERE (1)
AND ((account_type='com.whatsapp'))
ORDER BY contact_id ASC
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java)
at android.content.ContentProviderProxy.query(ContentProviderNative.java)
at android.content.ContentResolver.query(ContentResolver.java)
at android.content.ContentResolver.query(ContentResolver.java)
...
재미 있습니다. 즉, 사용자가 티타늄 백업과 같은 루트 앱으로 연락처 데이터베이스를 복원하는 경우이 열이없는 연락처에 대한 이전 데이터베이스 파일이 생성 될 수 있습니다 (그러나 안드로이드 시스템은 존재한다고 생각하고 쿼리를 생성합니다 그 기본 데이터베이스 파일과 작동하지 않습니다 ...) 나는 그 – prom85
옙, 확실히, 나는 티타늄 백업 및 유사 사용하여 사용자에 의해 문제의 톤을 봤어요 확인, 그들은 쉽게 부러 수 있습니다. – marmor
고마워, 그건 완전히 이해가되고 나는 이것이 어떻게되는지 확신한다. 필자가 필요로하는 쿼리의 필드를 명시 적으로 정의함으로써 피할 수있다. 그러나 이것은 근본 원인을 설명합니다. 감사 – prom85