2015-03-16 2 views
0

при загрузке моей основной деятельности, я хочу найти в базе данных все записи и отобразить в списке. Когда он переходит к функции в моем классе DatabaseHandler getAllClients(), чтобы прочитать все записи, он сработает. Здесь я отображал фрагменты кода и привязывался ко всему файлу. Ошибка происходит приAndroid NullPointerException в списке

List<Client> addableClients = dbHandler.getAllClients(); 

MainActivity.java

... 
DatabaseHandler dbHandler; 
... 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    clientListView = (ListView) findViewById(R.id.list); 

    //Below is the code to go to the QR Code 
    //Move to main screen on button click 
    // 
    //Intent gotoQRCode = new Intent(LoginActivity.this, Keytag.class); 
    //gotoQRCode.putExtra(CLIENTID, jsonObject.optString("clientID")); 

    //startActivity(gotoQRCode); 

    //Below line throws NullPointerException 
    List<Client> addableClients = dbHandler.getAllClients(); 

    int clientCount = dbHandler.getClientCount(); 

    for(int i = 0; i < clientCount; i++) { 
     Clients.add(addableClients.get(i)); 
    } 

    populateList(); 
} 

Посмотреть полный файл на http://pastebin.com/JhYZ35ri

DatabaseHandler.java

public List<Client> getAllClients() { 
    List<Client> clients = new ArrayList<Client>(); 

    SQLiteDatabase db = getReadableDatabase(); 

    Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null); 


    if(cursor != null) { 
     cursor.moveToFirst(); 
     do { 
      clients.add(new Client(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), Uri.parse(cursor.getString(3)), cursor.getString(4))); 
     } 
     while (cursor.moveToNext()); 

    } 
    cursor.close(); 
    db.close(); 

    return clients; 
} 

См фу Л.Л. файл на http://pastebin.com/4CYheGpG

+0

Если вы правильно идентифицировать обижая линию, то '' dbHandler' является null'. –

+1

Где вы определяете и создаете экземпляр 'dbHandler'? Это не в показанном коде. – David

+0

dbHandler? или dbHandler.getAllClients()? – swg1cor14

ответ

0

Так вызывая

DatabaseHandler dbHandler 

объявляет только dbHandler как тип DatabaseHandler. Он не инициирует его. Мне не хватало самой критической строки кода, которая полностью сошла с ума.

dbHandler = new DatabaseHandler(getApplicationContext()); 

Я мог бы также назвать его в качестве глобальной частной переменной в верхней части класса

private DatabaseHandler dbHandler = new DatabaseHandler(getApplicationContext()); 
Смежные вопросы