Android: ContactsContract request, more advanced selection bar required

I am trying to execute a ContactContractContentProvider request and get the data that the following algorithm will receive:

given a phone number (input), return record...:
if(recordNumber has 7 digits) {
    if('%recordNumber' LIKE 'inputNumber') {
        return recordDisplayName;
    }
} else if(recordNumber has 10 digits) {
    if('recordNumber' LIKE '%inputNumber') {
        return recordDisplayName;
    }
} else if(recordNumber == inputNumber) {
    return recordDisplayName;
}

this works in the request:

ContactsContract.CommonDataKinds.Phone.NUMBER+" LIKE ?"

but I need something more:

"('%" + ContactsContract.CommonDataKinds.Phone.NUMBER+"' LIKE '?' AND LENGTH("+ContactsContract.CommonDataKinds.Phone.NUMBER+")=7) OR ('" + ContactsContract.CommonDataKinds.Phone.NUMBER+"' LIKE '%?' AND LENGTH("+ContactsContract.CommonDataKinds.Phone.NUMBER+")=10)"

but I get runtime errors every time I use a single quote request. e.g. change:

ContactsContract.CommonDataKinds.Phone.NUMBER+" LIKE ?"

at

ContactsContract.CommonDataKinds.Phone.NUMBER+" LIKE '?'"

raises a runtime error "bind or column index out of range ...". so this should be some syntax error ... right? What is the correct syntax for queries ContentProviderand / or how can I get the result set I am after ContactsContract?

+3
source share
2 answers

ContentProviders . ContentProviders, "%" , "%" WHERE, .

:

Cursor cursor = getContentResolver().query(
    ContactsContract.Data.CONTENT_URI, 
    null, 
    ContactsContract.CommonDataKinds.Phone.NUMBER+" LIKE ?",
    new String[] { "%"+number },
    null);

:

Cursor cursor = getContentResolver().query(
    ContactsContract.Data.CONTENT_URI, 
    null, 
    ContactsContract.CommonDataKinds.Phone.NUMBER+" LIKE %?", 
    new String[] { number }, 
    null);

"" SQLite, ContentProvider.

, ​​ WHERE ContentProvider ( ).

:

if(number.length()==7) {
    cursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, 
        ContactsContract.CommonDataKinds.Phone.NUMBER+" LIKE ?",
        //"('%" + ContactsContract.CommonDataKinds.Phone.NUMBER+"' LIKE '?' AND LENGTH("+ContactsContract.CommonDataKinds.Phone.NUMBER+")=7) OR ('" + ContactsContract.CommonDataKinds.Phone.NUMBER+"' LIKE '%?' AND LENGTH("+ContactsContract.CommonDataKinds.Phone.NUMBER+")=10)",
        new String[] { "%"+number },
        null);
} else if(number.length()==10) {
    cursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, 
        "("+ContactsContract.CommonDataKinds.Phone.NUMBER+"=? AND LENGTH("+ContactsContract.CommonDataKinds.Phone.NUMBER+")=7) OR ("+ContactsContract.CommonDataKinds.Phone.NUMBER+"=? AND LENGTH("+ContactsContract.CommonDataKinds.Phone.NUMBER+")=10)",
        new String[] { number.substring(3), number },
        null);
} else {
    cursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, 
        ContactsContract.CommonDataKinds.Phone.NUMBER+"=?",
        new String[] { number },
        null);
}

, .
- 7- , , 7 ( , "*" "#", ) 7 .
- 10- , , 7 7 , , 10 .
- , , 7, 10 , .

+8

ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER ContactsContract.CommonDataKinds.Phone.NUMBER

0

All Articles