【发布时间】:2021-02-19 21:28:34
【问题描述】:
我有一个ArrayList,我尝试将其转换为String[],以便查询我的数据库,但我得到outofboundException,但我不知道问题出在哪里?
将数组列表转换为字符串[]:
String[] idsArray = new String[selectedTopicIds.size()];
idsArray = selectedTopicIds.toArray(idsArray);
for (int i = 0; i < selectedTopicIds.size(); i++) {
idsArray[i] = selectedTopicIds.get(i);
}
然后我用Cursor来查询:
Cursor cursor = myDb.query(Util.TABLE_NAME,
null,
Util.KEY_TOPIC + "=?",
idsArray,
null,
null,
null);
这就是光标循环的方式:
if (cursor.moveToFirst()) {
do {
Word word = new Word();
word.setId(cursor.getInt(0));
wordList.add(word);
} while (cursor.moveToNext());
}
cursor.close();
在我给它idsArray的线上我有这个例外:
java.lang.IllegalArgumentException:无法在索引 35 处绑定参数 因为索引超出范围。该语句有 1 个参数。
arraylist 和 String[] 都必须有 35 个从索引 0 到 34 的元素
我不明白问题出在哪里?
【问题讨论】:
-
这意味着您的数组中的索引 35 不存在。因此,您的数组中没有足够的项目,并且您正在调用不存在的东西。
-
edit 您的问题并发布整个堆栈跟踪(请参阅 logcat)
The statement has 1 parameters.表示您的查询语句仅包含一个?字符。 -
我知道,但我怎样才能让我的光标不调用索引 35?
-
我添加了光标循环功能
-
索引 35 表示它要求第 36 个元素
标签: java android sql sqlite android-sqlite