0

私は次のように携帯電話から特定のタイプのすべての連絡先を取得しようとしている:のContentProvider(連絡先) - いいえ、そのようなコラム: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、ヌガーをスローします=>多分それはこれに関連していますか?)私はまだ1人のユーザーからこのエラーがありました。私はここにこだわっています。誰かがそれを解決する方法を知っていますか?すべての連絡先に問い合わせる別の方法はありますか?

私の例外は、次のようになります。これは、ユーザーのカスタム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) 
    ... 

答えて

1

私はあなたのクエリに何か問題が表示されていないが、それはそう。

METADATA_DIRTYは、AndroidのNの新しい列です: https://developer.android.com/reference/android/provider/ContactsContract.RawContactsColumns.html#METADATA_DIRTY

システムはヌガーですが、Contacts DBはAndroidの古いバージョンに基づいているようなので、それはそう。

+0

これは興味深いことです。これは、ユーザーがチタンバックアップのようなルートアプリを使用して連絡先データベースを復元している場合、この列がない連絡先の古いデータベースファイルを作成する可能性があることを意味します(ただし、アンドロイドシステムでは存在すると判断してクエリを作成しますそれは基本的なデータベースファイルで動作していない)...私はそれを確認します – prom85

+0

間違いなく、私はチタンのバックアップなどを使用してユーザーが問題のトンを見てきました、彼らは簡単に壊れることができます。 – marmor

+0

ありがとう、それは完全に意味があり、私はこれが起こることを確信しています...私は明示的に私の必要なクエリのフィールドを定義することによってそれを回避しようと、それはすでに助けになります。しかし、これは根本的な原因を説明しています。ありがとう – prom85

関連する問題