Предложение поставщика контента Android IN - PullRequest
10 голосов
/ 10 августа 2011

Можно ли использовать предложение IN для контент-провайдера?

Я сейчас использую

cursor = contentResolver.query(CONTENT_URI, PROJECTION, "field IN (?)", new String[] { argsBuilder.toString() }, null);

Если я удаляю (?) и просто использую ?, я получаю ошибку.

Я получаю 0 в моем курсоре.

Если я наберу вручную и выполню запрос в sqlite3, это сработает.

Помощь

Ответы [ 2 ]

21 голосов
/ 10 августа 2011

При использовании оператора IN вам нужно иметь один ?, разделенный запятой на аргумент, который вы предоставляете в массиве selectionArgs. E.g.:

String[] selectionArgs = {"red", "black"};
String selection = "color IN (?, ?)";

Следующее выбирает правильный счет и правильный args:

int argcount = 2; // number of IN arguments
String[] args = new String[]{ 1, 2 };
StringBuilder inList = new StringBuilder(argcount * 2);
for (int i = 0; i < argcount; i++) { 
    if(i > 0) {
        inList.append(",");
    }
    inList.append("?"); 
}
cursor = contentResolver.query(
   CONTENT_URI, 
   PROJECTION, 
   "field IN (" + inList.toString() + ")", 
   args, 
   null);
2 голосов
/ 23 февраля 2015

Если ваши аргументы только цифры, это также работает:

Iterable args = ...; // any array, list, set, ... 
cursor = contentResolver.query(CONTENT_URI, PROJECTION, "field IN (" + TextUtils.join(",", args) + ")", null, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...