簡體   English   中英

檢索未從 Android 聯系人列表中刪除的電話號碼

[英]Retrieving Phone Numbers that are not deleted from the Android Contact List

我正在嘗試從未標記為刪除的 ContactsContract 中檢索電話號碼。

@Override
public Loader onCreateLoader(int id, Bundle args) {
    return new CursorLoader(
            this,
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            new String[]{
                    ContactsContract.CommonDataKinds.Phone.NUMBER
            },
            ContactsContract.CommonDataKinds.Phone.DELETED + "==0",
            null,
            null);
}

但是,我收到以下錯誤:

java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:304)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:818)
 Caused by: android.database.sqlite.SQLiteException: no such column: deleted (code 1): , while compiling: SELECT DISTINCT data1 FROM view_data data LEFT OUTER JOIN (SELECT data_usage_stat.data_id as STAT_DATA_ID, SUM(data_usage_stat.times_used) as times_used, MAX(data_usage_stat.last_time_used) as last_time_used FROM data_usage_stat GROUP BY data_usage_stat.data_id) as data_usage_stat ON (STAT_DATA_ID=data._id) WHERE (1 AND mimetype_id=5) AND ((deleted==0))
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:181)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
        at android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
        at android.content.ContentResolver.query(ContentResolver.java:478)
        at android.content.CursorLoader.loadInBackground(CursorLoader.java:64)
        at android.content.CursorLoader.loadInBackground(CursorLoader.java:42)
        at android.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:312)
        at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:69)
        at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:57)
        at android.os.AsyncTask$2.call(AsyncTask.java:292)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)

ContactsContract.CommonDataKinds.Phone.CONTENT_URI 的文檔指出,數據記錄將與關聯的原始聯系人和聚合聯系人數據相結合。 但“刪除”不存在。 為什么以及如何只能獲取未刪除的電話號碼?

數據 URI 投影沒有 DELETED 列,在任何情況下,您的查詢都應該只檢索未刪除的聯系人的電話號碼。 您能否獲得已刪除的原始聯系人的電話號碼?

我認為您正在對錯誤的表進行查詢。 嘗試將ContactsContract.CommonDataKinds.Phone.CONTENT_URI更改為ContactsContract.Contacts.CONTENT_URI

我遇到了同樣的問題,並結束了我對檢索聯系人的最快解決方案的搜索。

public static List<ContactDTO> getPhone(Context context){
        List<ContactDTO> contactList = new ArrayList<ContactDTO>();
        ContentResolver cr = context.getContentResolver(); 
        String[] PROJECTION = new String[] { 
                ContactsContract.RawContacts._ID, 
                ContactsContract.Contacts.DISPLAY_NAME,
                ContactsContract.CommonDataKinds.Phone.PHOTO_URI,
                ContactsContract.CommonDataKinds.Phone.NUMBER,
                ContactsContract.CommonDataKinds.Photo.CONTACT_ID };

        Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
        String filter = ""+ ContactsContract.Contacts.HAS_PHONE_NUMBER + " > 0 and " + Phone.TYPE +"=" + Phone.TYPE_MOBILE;     
        String order = ContactsContract.Contacts.DISPLAY_NAME + " ASC";// LIMIT " + limit + " offset " + lastId + "";

        Cursor phoneCur = cr.query(uri, PROJECTION, filter, null, order);
        while(phoneCur.moveToNext()){
             ContactDTO dto = new ContactDTO();
             dto.setName("" + phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
             dto.setMobileNo("" + phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
             dto.setPhotoUrl("" + phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI)));
             dto.setContactId("" + phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Photo.CONTACT_ID)));
             contactList.add(dto);
         }
         phoneCur.close();
        return contactList;
}

其中 ContactDTO 是簡單的 POJO 類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM