Как отфильтровать результаты сопоставителя содержания в андроиде?

Я хотел бы получить пользовательские контакты и затем добавить некоторое регулярное выражение и добавить их к представлению списка. Я в настоящее время могу получить все контакты через

getContentResolver().query(People.CONTENT_URI, null, null, null, null);

и затем передайте их пользовательскому классу, который расширяется SimpleCursorAdapter.

Таким образом, я хотел бы знать, как получить только контакты, которые соответствуют регулярному выражению и не всем пользовательским контактам.

33
задан bstpierre 21 May 2012 в 02:50
поделиться

3 ответа

Проституты и удар?

-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 '

, и вы объединяете строки.

68
ответ дан 27 November 2019 в 17:51
поделиться

Вы можете запросить поставщик контента с помощью типа 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 + "'" - это предложение «Где», поэтому я извлекаю имя и тип, где соответствует номеру телефона

6
ответ дан 27 November 2019 в 17:51
поделиться

Вы должны быть в состоянии поставить юридическую SQLite, когда пункт, когда третий аргумент к методу запроса (), включая A, как, но нет собственного функции Regeexp в SQLite, а Android не кажется Чтобы позволить вам определить свой собственный. Таким образом, в зависимости от того, насколько сложны ваши потребности, набор других условий SQLite и как выражения могут сделать трюк.

См. Документацию по методу под Contentresolver и SQLite Speciestions .

3
ответ дан 27 November 2019 в 17:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: