为什么我会得到Null Pointer Exception?

时间:2013-01-16 20:51:49

标签: java android sqlite cursor nullpointerexception

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

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++;
}    

这就是我的表格: enter image description here

但每次我的最后一行都没有被提取,我得到一个空指针异常。这是日志猫屏幕: enter image description here

为什么我的代码只能正确运行n-1行并在第(n)行产生问题,其中n是我的新闻表中的总行数。

2 个答案:

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