Я хотел бы получить пользовательские контакты и затем добавить некоторое регулярное выражение и добавить их к представлению списка. Я в настоящее время могу получить все контакты через
getContentResolver().query(People.CONTENT_URI, null, null, null, null);
и затем передайте их пользовательскому классу, который расширяется SimpleCursorAdapter
.
Таким образом, я хотел бы знать, как получить только контакты, которые соответствуют регулярному выражению и не всем пользовательским контактам.
Проституты и удар?
-121--1246600-Вместо
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);
, это использует параметризованный запрос (используя ? ) и предоставляет фактические значения как другой аргумент, это позволяет избежать ConcateNation и предотвращает 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 Ввод, метод запроса - это просто обертка для команды 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 - это данные, которые я хочу вернуться и контактировать .Phones.Number + "= '" + phonenumber + "'" - это предложение «Где», поэтому я извлекаю имя и тип, где соответствует номеру телефона
Вы должны быть в состоянии поставить юридическую SQLite, когда пункт, когда третий аргумент к методу запроса (), включая A, как, но нет собственного функции Regeexp в SQLite, а Android не кажется Чтобы позволить вам определить свой собственный. Таким образом, в зависимости от того, насколько сложны ваши потребности, набор других условий SQLite и как выражения могут сделать трюк.
См. Документацию по методу под Contentresolver и SQLite Speciestions .