我想获取用户联系人,然后附加某种正则表达式并将它们附加到列表视图中。我目前能够通过如何在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