0

我正在使用以下代码从数据库中获取数据:

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 是我的新闻表中的总行数。

4

2 回答 2

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++;
}
于 2013-01-16T20:56:26.447 回答
1
while (!(cursor.isLast())) 

我认为问题而不是isLast(). 你明确地说如果不是最后一行。

将while循环更改为:

 while (cursor.moveToNext()) {
   //Your code.
}
于 2013-01-16T20:56:31.507 回答