簡體   English   中英

ANDROID:如何根據標准電話號碼列表過濾使用CursorLoader的聯系人列表

[英]ANDROID: How do I filter a list of Contacts with a CursorLoader based on a list of standardized phone numbers

我有一份電話號碼清單,我剝奪的全部都是十位數。 我想使用該列表在光標上進行過濾,但無法將傳入列表轉換為相同的格式(僅十位數字)。 我不能使用PhoneLookup.CONTENT_FILTER_URI因為它只能與一個電話號碼進行比較,並且與PHONE_NUMBERS_EQUAL( sqlite函數相同。這就是我目前的選擇聲明:

Contacts.DISPLAY_NAME_PRIMARY + "<>''" + " AND " + Contacts.IN_VISIBLE_GROUP + "=1" + " AND " + ContactsContract.CommonDataKinds.Phone.NUMBER + " IN (" + TextUtils.join(",", Collections.nCopies(registeredPhoneNumbers.size(), "?")) + ")";

它目前僅適用於某些電話號碼,但不適用於其他電話號碼(取決於我保存聯系人電話號碼的方式)。 關於如何使用CursorLoader使過濾器工作的任何想法?

尚未經過全面測試,但是您可以使用(或基於此的方法)刪除非數字並返回單個列。

在這種情況下,源表為(因此電話號碼為相關列):-

在此處輸入圖片說明

SQL:-

SELECT digit1||digit2||digit3||digit3||digit5||digit6||digit7||digit8||digit9||digit10||digit11||digit12||digit13||digit14 AS converted  FROM
(SELECT 
substr(phonenumber,1,1) AS testdigit1, length(phonenumber),
CASE
    WHEN substr(phonenumber,1,1) < '0' OR substr(phonenumber,1,1) > '9' THEN '' ELSE substr(phonenumber,1,1)  END AS digit1,
CASE
    WHEN substr(phonenumber,2,1) < '0' OR substr(phonenumber,1,1) > '9' THEN '' ELSE substr(phonenumber,2,1)  END AS digit2,
CASE
    WHEN substr(phonenumber,3,1) < '0' OR substr(phonenumber,1,1) > '9' THEN '' ELSE substr(phonenumber,3,1)  END AS digit3 ,
CASE
    WHEN substr(phonenumber,4,1) < '0' OR substr(phonenumber,1,1) > '9' THEN '' ELSE substr(phonenumber,4,1)  END AS digit4,
CASE
    WHEN substr(phonenumber,5,1) < '0' OR substr(phonenumber,1,1) > '9' THEN '' ELSE substr(phonenumber,5,1)  END AS digit5,
CASE
    WHEN substr(phonenumber,6,1) < '0' OR substr(phonenumber,6,1) > '9' THEN '' ELSE substr(phonenumber,6,1)  END AS digit6,
CASE
    WHEN substr(phonenumber,7,1) < '0' OR substr(phonenumber,7,1) > '9' THEN '' ELSE substr(phonenumber,7,1)  END AS digit7,
CASE
    WHEN substr(phonenumber,8,1) < '0' OR substr(phonenumber,8,1) > '9' THEN '' ELSE substr(phonenumber,8,1)  END AS digit8,
CASE
    WHEN substr(phonenumber,9,1) < '0' OR substr(phonenumber,9,1) > '9' THEN '' ELSE substr(phonenumber,9,1)  END AS digit9,
CASE 
    WHEN length(phonenumber) >= 10 AND substr(phonenumber,10,1) >= '0' AND substr(phonenumber,10,1) <= '9' THEN substr(phonenumber,10,1) ELSE '' END AS digit10,
CASE 
    WHEN length(phonenumber) >= 11 AND substr(phonenumber,11,1) >= '0' AND substr(phonenumber,11,1) <= '9' THEN substr(phonenumber,11,1) ELSE '' END AS digit11,
CASE 
    WHEN length(phonenumber) >= 12 AND substr(phonenumber,12,1) >= '0' AND substr(phonenumber,12,1) <= '9' THEN substr(phonenumber,12,1) ELSE '' END AS digit12,
CASE 
    WHEN length(phonenumber) >= 13 AND substr(phonenumber,13,1) >= '0' AND substr(phonenumber,13,1) <= '9' THEN substr(phonenumber,13,1) ELSE '' END AS digit13,
CASE 
    WHEN length(phonenumber) >= 14 AND substr(phonenumber,14,1) >= '0' AND substr(phonenumber,14,1) <= '9' THEN substr(phonenumber,14,1) ELSE '' END AS digit14
FROM phonenumbers)
  • 顯然,用於檢查電話號碼長度的開關將用於處理盡可能小的長度。
  • 如果假設更多字符,然后簡單地相應添加,則假定最多14個字符。

您只需對此進行合並,並進行適當的更改(如果我正確理解以替換ContactsContract.CommonDataKinds.Phone.NUMBER)。

應用上面的SQL結果:

在此處輸入圖片說明

暫無
暫無

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

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