android:cursor忽略表中的第一行

时间:2016-01-23 12:26:25

标签: java android

我有一个数据库,我想用光标收集字符串[]中一列的所有对象...所以这是我的代码:

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 ..!

所以我的错误在哪里? ...谢谢!

3 个答案:

答案 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