2012-03-24 3 views
3

Я изучаю, как работать с базой данных sqlite, и я попытался реализовать рекордную систему в игре, которую я сделал. чтение строк работает, когда я пытаюсь показать оценки, но когда я пытаюсь использовать ту же идею, чтобы читать значения, чтобы сравнить их в следующем методе - он дает ошибку исключения нулевого указателя.Strange nullPointerException error - связанная с базой данных

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 часов. благодаря!

+6

Как объявляется и инициализируется 'mDbHelper'? –

+1

Может быть: 'mDbHelper' не инициализирован, или' mDbHelper.fetchNote (i) 'возвращает null (у нас нет кода для этого), пожалуйста, добавьте log cat и еще код, чтобы мы могли помочь –

+0

mDbHelper = new ScoresDbAdapter (это); mDbHelper.open(); также помните, что я использую ту же команду (fetchNote) для чтения из базы данных по другому методу, поэтому она работает хорошо, в большинстве случаев. – Zephyer

ответ

0

В качестве альтернативы код у вас есть вы могли бы сделать что-то вроде

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 которые быстрее и сэкономить какую-то работу.

Смежные вопросы