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

これは私のテーブルがどのように見えるかです: ここに画像の説明を入力

しかし、最後の行がフェッチされず、null ポインター例外が発生するたびに。これがログキャット画面です: ここに画像の説明を入力

私のコードが 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 に答える