我有一个数据库,我想用光标收集字符串[]中一列的所有对象...所以这是我的代码:
c.moveToFirst();
int i = 0;
String[] addresses = new String[c.getCount()];
while(c.moveToNext()) {
addresses[i] = c.getString(c.getColumnIndex("address"));
i++;
}
c.close();
但是当我使用这段代码时:
StringBuilder builder = new StringBuilder();
for(String in : addresses) {
builder.append("" + in + " ");
}
Toast.makeText(getApplicationContext(), builder, Toast.LENGTH_LONG).show();
为了显示我的字符串[]中的所有对象,我得到了这个:
234567null
..但正确答案应该是这样的:1234567
..!
所以我的错误在哪里? ...谢谢!
答案 0 :(得分:5)
tl; dr 删除对moveToFirst()
的调用,它会有效。
新的Cursor
从位置-1
开始,通过致电moveToFirst
,它将移至0
位置。
如果您在调用while(moveToNext)
后使用moveToFirst
,则循环中访问的第一个索引将为1
,跳过0
。
光标循环最好只使用
完成cursor.moveToPosition(-1); // in case you accessed it before
while(cursor.moveToNext()) {
// ...
}
cursor.close();
答案 1 :(得分:1)
这是使用游标的选项:
if (c != null && c.moveToFirst()) {
do {
// read your cursor params
} while (c.moveToNext());
}
答案 2 :(得分:0)
你不需要:
c..moveToFirst();
光标从第一个结果开始, moveToNext 将它带到第一行。
你编写它的方式,光标跳过第一行,因为 moveToFirst 将它带到第一行,然后 moveToNext 将它带到第二行。因此,地址最后有一个字符串,并且由于你已经修复了数组的长度,所以它给出了null。如果您使用的列表明确表示它会跳过第一个列表,那么您将获得 234567 。