J'essaie d'obtenir tous les contacts d'un type spécifique du téléphone comme suit:ContentProvider (contacts) - pas de colonne: metadata_dirty
Cursor cursor = context.getContentResolver().query(
ContactsContract.RawContacts.CONTENT_URI,
null,
ContactsContract.RawContacts.ACCOUNT_TYPE + "='com.whatsapp'",
null,
ContactsContract.RawContacts.CONTACT_ID + " ASC");
Mais cette ligne jette déjà une exception (ROM personnalisé, nougats => peut-être que c'est lié à ça?). J'ai seulement eu cette erreur d'un utilisateur et je suis coincé ici, est-ce que quelqu'un sait comment résoudre cela? Existe-t-il une alternative pour interroger tous les contacts?
Mon exception ressemble à ce qui suit:
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)
...
C'est intéressant. Cela signifie que si l'utilisateur restaure sa base de contacts avec une application racine comme la sauvegarde titanium, il peut créer un ancien fichier de base de données pour les contacts où cette colonne est manquante (MAIS, son système android pensera qu'il existe et créera une requête cela ne fonctionne pas avec le fichier de base de données sous-jacent) ... Je vais vérifier que – prom85
oui, certainement, j'ai vu une tonne de problèmes par les utilisateurs utilisant la sauvegarde en titane et similaire, ils peuvent facilement casser. – marmor
merci, cela fait tout à fait sens et je suis tout à fait sûr que c'est ce qui se passe ... J'essaie de l'éviter en définissant explicitement les champs dans ma requête dont j'ai besoin, cela aidera déjà. Mais cela explique la cause profonde. Merci – prom85