我想獲取用戶聯繫人,然後附加某種正則表達式並將它們附加到列表視圖中。我目前能夠通過如何在android中過濾內容解析器的結果?
getContentResolver().query(People.CONTENT_URI, null, null, null, null);
讓所有的聯繫人,然後將它們傳遞到擴展SimpleCursorAdapter
自定義類。
所以我想知道如何獲得匹配正則表達式的聯繫人,而不是所有的用戶聯繫人。
我想獲取用戶聯繫人,然後附加某種正則表達式並將它們附加到列表視圖中。我目前能夠通過如何在android中過濾內容解析器的結果?
getContentResolver().query(People.CONTENT_URI, null, null, null, null);
讓所有的聯繫人,然後將它們傳遞到擴展SimpleCursorAdapter
自定義類。
所以我想知道如何獲得匹配正則表達式的聯繫人,而不是所有的用戶聯繫人。
而不是
getContentResolver().query(People.CONTENT_URI, null, null, null, null);
你應該使用類似
final ContentResolver resolver = getContentResolver();
final String[] projection = { People._ID, People.NAME, People.NUMBER };
final String sa1 = "%A%"; // contains an "A"
cursor = resolver.query(People.CONTENT_URI, projection, People.NAME + " LIKE ?",
new String[] { sa1 }, null);
此使用參數請求(使用?),並提供實際的值不同的參數,這樣就避免了級聯和主要是在您向用戶請求過濾時主要阻止SQL注入。例如,如果你正在使用
cursor = resolver.query(People.CONTENT_URI, projection,
People.NAME + " = '" + name + "'",
new String[] { sa1 }, null);
想象一下,如果
name = "Donald Duck' OR name = 'Mickey Mouse") // notice the " and '
,你是串聯字符串。
您可以使用sql類型輸入查詢內容提供者,Query方法只是sql命令的包裝器。
這裏就是我查詢聯繫人的名字賦予了特定數量
String [] requestedColumns = {
Contacts.Phones.NAME,
Contacts.Phones.TYPE
};
Cursor contacts = context.getContentResolver().query(
Contacts.Phones.CONTENT_URI,
requestedColumns,
Contacts.Phones.NUMBER + "='" + phoneNumber + "'",
null, null);
注意,而不是空我有一個建立在SQL語句的參數的例子。
的requestColumns是數據我想回去和Contacts.Phones.NUMBER +「=「」 + phoneNumber的+「」」是Where子句,讓我找回在電話號碼匹配
的名稱和類型您應該可以將合法的SQLite WHERE子句作爲query()方法的第三個參數,包括LIKE,但SQLite中沒有本機REGEXP函數,而Android似乎不允許您定義自己的。因此,根據您的需求的複雜程度,一組其他SQLite條件和LIKE表達式可能會有所裨益。
請參閱ContentResolver和SQLite expressions下query method的文檔。
實際上,使用Calllog Content Provider的REGEXP工作(意味着爲該內容提供者的數據庫https://sqlite.org/lang_expr.html#regexp定義了regexp()函數)!但速度非常緩慢:約1750記錄約15秒。
String regexp = "([\\s\\S]{0,}" +
TextUtils.join("||[\\s\\S]{0,}", numbers) +
")";
cursor = context.getContentResolver().query(
CallLog.Calls.CONTENT_URI,
null,
CallLog.Calls.NUMBER + " REGEXP ?",
new String[]{regexp},
CallLog.Calls.DATE + " DESC"
);
非常感謝您的回覆我真的很感激。 – maxsap 2010-01-30 00:01:39
非常好的解釋,非常感謝! – 2012-04-19 13:20:10