2014-01-14 3 views
0

Я пытаюсь получить данные книги из своей базы данных, но я продолжаю работать в NullPointerException. У меня есть двойной массив Записи, которые я хочу заполнить с помощью элемента книги и его 5 соответствующих деталей. Я знаю, что у меня есть дополнительные элементы в массиве InventoryAdapter, которые я не использую в этом методе, но я держу его там, так как я использую его в другом месте.Android Null Pointer Exception SQLite

Ошибка возникает при Entries[i][0] = InventoryAdapter.getInventoryByISBN(records[i][0])[1]; и выдвижением на Cursor cursor = db.rawQuery(query, new String[] {ISBN});

Почему бы ошибка в Cursor? Я бы подумал, что ошибка, вероятно, произойдет с вызовом местоположения массива, которого не существует.

Главный код

int numEntries = 2; 
Entries = new String[numEntries][5]; 
    int totalCount = 0; 
    if (BuildConfig.DEBUG) 
      Log.d(debug.LOG, "numEntries="+numEntries); 

    Toast.makeText(ReportsByDateScreen.this, "numEntries="+numEntries, Toast.LENGTH_LONG).show(); 

    // Set up search array 
    for(int i = 0; i < numEntries; i++) 
    { 
     Entries[i][0] = InventoryAdapter.getInventoryByISBN(records[i][0])[1]; 
     Entries[i][1] = InventoryAdapter.getInventoryByISBN(records[i][0])[2]; 
     Entries[i][2] = InventoryAdapter.getInventoryByISBN(records[i][0])[4]; 
     Entries[i][3] = InventoryAdapter.getInventoryByISBN(records[i][0])[3]; 
     for(int j = 0; j < records.length; j++) 
     { 
      if(records[j][0].equals(InventoryAdapter.getInventoryByISBN(records[i][0])[0])) 
      { 
       totalCount+=Integer.parseInt(InventoryAdapter.getInventoryByISBN(records[i][0])[8]); 
      } 
     } 
     Entries[i][4] = ((Integer)totalCount).toString(); 
     reportArray.add(new ReportsItem(records[i][0],Entries[i])); 
     totalCount = 0; 
    } 

InventoryAdapter

public static String[] getInventoryByISBN(String ISBN) 
{ 
    String[] entry = new String[9]; 
    //Query 
    String query = "select * from INVENTORY where ISBN = ?"; 
    Cursor cursor = db.rawQuery(query, new String[] {ISBN}); 
    if(cursor.getCount()<1) // title Not Exist 
    { 
     cursor.close(); 
     for(int i = 0; i < 9; i++) 
      entry[i] = "Not Found"; 
     return entry; 
    } 
    cursor.moveToFirst(); 
    //put data into respective variable 
    int publish = cursor.getInt(cursor.getColumnIndex("PUBLISH_DATE")); 
    String publishdate = ((Integer)publish).toString(); 
    String title = cursor.getString(cursor.getColumnIndex("TITLE")); 
    String author = cursor.getString(cursor.getColumnIndex("AUTHOR")); 
    String callNumber = cursor.getString(cursor.getColumnIndex("CALL_NUMBER")); 
    int available = cursor.getInt(cursor.getColumnIndex("AVAILABLE_COUNT")); 
    String availablecount = ((Integer)available).toString(); 
    int inventory = cursor.getInt(cursor.getColumnIndex("INVENTORY_COUNT")); 
    String inventorycount = ((Integer)inventory).toString(); 
    int due = cursor.getInt(cursor.getColumnIndex("DUE_PERIOD")); 
    String dueperiod = ((Integer)due).toString(); 
    int checkoutcount = cursor.getInt(cursor.getColumnIndex("COUNT")); 
    String count = ((Integer)checkoutcount).toString(); 
    //combine variables into one array 
    entry[0] = ISBN; 
    entry[1] = title; 
    entry[2] = author; 
    entry[3] = publishdate; 
    entry[4] = callNumber; 
    entry[5] = availablecount; 
    entry[6] = inventorycount; 
    entry[7] = dueperiod; 
    entry[8] = count; 
    cursor.close(); 
    return entry; 
} 

ответ

0

Существует 2 различные возможности здесь:

  • ISBN является нулевым (и записей расширения [I] [ 0] тоже нуль);
  • дб нулевой

Я изучу, что если я вам. Используйте отладчик.

Я могу вам многое рассказать, потому что вы не публикуете код своей инициализации SQLiteDatabase.