我使用以下代码从数据库中获取数据:
Cursor cursor = db.query(News_Table, null, null, null, null, null, null);
if (cursor != null)
{
cursor.moveToFirst();
}
allNews = new News[cursor.getCount()];
int i = 0;
while (!(cursor.isLast()))
{
allNews[i] = new News(cursor.getInt(0), cursor.getString(2),
cursor.getString(1));
cursor.moveToNext();
i++;
}
这就是我的表格:
但每次我的最后一行都没有被提取,我得到一个空指针异常。这是日志猫屏幕:
为什么我的代码只能正确运行n-1行并在第(n)行产生问题,其中n是我的新闻表中的总行数。
答案 0 :(得分:4)
cursor.isLast()将返回true,因此你的while循环将在那个没有读取的位置停止。处理了最后一行。通常,迭代光标的模式是(注意这不会调用moveToFirst()
)
Cursor cursor = getACursor();
int i = 0;
while (cursor.moveToNext()) {
/// do something with this row
allNews[i] = new News(cursor.getInt(0), cursor.getString(2),cursor.getString(1));
i++;
}
答案 1 :(得分:1)
while (!(cursor.isLast()))
我认为问题不在于isLast()
。如果不是最后一行,你明确地说。
将while循环更改为:
while (cursor.moveToNext()) {
//Your code.
}