2012-03-24 16 views
3

私はsqliteデータベースで作業する方法を学んで、私は私が作ったゲームで最高得点システムを実装しようとしました。私はスコアを表示しようとするときに、行を読むが、私は同じアイデアを使用して、次のメソッドでそれらを比較する値を読み取るしようとする - それは、nullポインタの例外エラーが発生します。奇妙なnullPointerExceptionエラー - データベース関連

private void checkIfHighScore(int currentScore) { 
    Cursor note; 
    int rowScore; 
    String moveName, moveScore, newName; 

    for (long i=1;i<6;i++){ 
     note = mDbHelper.fetchNote(i); 
     startManagingCursor(note); 
     rowScore=Integer.parseInt(note.getString(note.getColumnIndexOrThrow(ScoresDbAdapter.KEY_BODY))); 
     if (currentScore<rowScore){ 
      for (long j=5;j>i;j--){ 
       note = mDbHelper.fetchNote(j-1); 
       startManagingCursor(note); 
       moveName=note.getString(note.getColumnIndexOrThrow(ScoresDbAdapter.KEY_TITLE)); 
       moveScore=note.getString(note.getColumnIndexOrThrow(ScoresDbAdapter.KEY_BODY)); 
       mDbHelper.updateNote(j, moveName, moveScore); 
      } 
      newName="a"; //for testing 
      mDbHelper.updateNote(i, newName, Integer.toString(currentScore)); 
      break; 
     } 
    } 

} 

私はエラーがforループの後の行にあることを知っていますが、何が失敗するのかはわかりません。私のデータベースは5行のデータを持っています(検証済み)。 誰かが私のエラーの原因を知っていますか?私の頭を壁に2時間叩いていた。ありがとう!あなたは

String selectQuery = "SELECT MAX(COLUMN_NAME) FROM " + TABLE_NAME; 
SQLiteDatabase db = this.getWritableDatabase(); 
Cursor cursor = db.rawQuery(selectQuery, null); 
if(cursor.moveToFirst(){ 
    rowScore = Integer.parseInt(cursor.getString(0); 
    if(rowScore < currentScore){ 
     //you have a new high score 
    } 
} 

のようなものにあなたが高速化されたSQLiteが付属して事前に定義された機能を利用し、自分自身にいくつかの作業を保存し、この方法を行うことができていたコードに代わり

+6

'mDbHelper'はどのように宣言され、初期化されていますか? –

+1

'mDbHelper'が初期化されていないか、' mDbHelper.fetchNote(i) 'がnullを返す(そのコードはありません)、ログcatとコードを追加してください。 –

+0

mDbHelper = new ScoresDbAdapter(this); mDbHelper.open(); 私は同じコマンド(fetchNote)を使って別の方法でデータベースから読み込むので、うまくいきます。 – Zephyer

答えて