Quando você fornece uma única string como
whereArgs
, uma única string termina no comando SQL, como se você tivesse escrito isso:... WHERE _id IN ('1,2,42')
Isso compararia cada
_id
valor em relação ao valor '1,2,42'
, o que obviamente não funciona. Se você usar três marcadores de parâmetro e fornecer três strings no
whereArgs
array, você terminaria com três strings, assim:... WHERE _id in ('1','2','42')
Isso funciona apenas quando o
_id
coluna tem afinidade de inteiro, o que é verdade para uma coluna declarada como INTEGER PRIMARY KEY, mas não no caso geral. A API de banco de dados do Android não permite que os parâmetros de consulta tenham qualquer tipo além de string. Ao usar números inteiros, você deve apenas inseri-los diretamente (como na resposta de ianhanniballake):
String whereClause = getIdColumn() + " IN (" + TextUtils.join(",", ids) + ")";