2014-10-25 2 views
-1

Я пытаюсь написать базу данных для малого бизнеса для обработки резервирования. Это написано с использованием 21 API для Lollipop, я включил DBAdapter и классы создания резервирования ниже. Когда я пытаюсь нажать «Отправить», я получаю эту ошибку (StackOverflow не позволит мне опубликовать всю ошибку, но вот некоторые из них ->
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.database.sqlite.SQLiteOpenHelper.getWritableDatabase()' on a null object reference at net.stein13.reserveit.DBAdapter.open(DBAdapter.java:53) at net.stein13.reserveit.NewReservation.submitReservation(NewReservation.java:29) Попытался разобраться с моим преподавателем AP Computer Science, но она не сделала «знаю достаточно о Android, чтобы помочь мне понять это ..Ошибка при открытии SQLiteDatabase?

Новый класс Бронирование - http://pastebin.com/ALn9Q2sg DBAdapter класс - http://pastebin.com/07PZSiT1

Любая помощь будет очень признателен !! Спасибо заранее

+0

Вы уверены, что pastebins - это тот же самый код, который вы компилируете и запускаете? Номера строк из сообщений об ошибках не совпадают. –

+0

Да, я уверен, что я взял код непосредственно из последнего раза, когда я его скомпилировал, и произошла ошибка, когда я запустил его на AVD и нажал Отправить – Rudi

+0

Обратите внимание, что сообщение об ошибке сообщает вам, что NPE встречается по строке 53 'DBAdapter.java'. (Если вы нажмете на эту строку в своей среде IDE, она перейдет прямо к строке кода с этой проблемой.) Однако в pastebin эта строка пуста. Похоже, что вы вставили пустую строку где-то между тем временем, когда вы скомпилировали и запустили приложение, и время, когда вы создали пастебин. Пожалуйста, будьте осторожны с этим в будущем, так как это может вызвать много путаницы. –

ответ

2

ошибка! происходит потому, что вы никогда не инициализируете переменную-член DBHelper. , поскольку DBAdapter распространяет SQLiteOpenHelper, нет необходимости в DBHelper. Это связано с тем, что каждый DBAdapter является SQLiteOpenHelper. Это означает, что вы можете вызвать все методы SQLiteOpenHelper непосредственно на любом DBAdapter. Например, вы должны изменить метод open() к

db = getWritableDatabase(); 

Вы также должны полностью удалить close(). SQLiteOpenHelper уже имеет метод close(), который выполняет всю работу за вас.

+0

Большое вам спасибо! Это исправило это, теперь мне просто нужно исправить несколько второстепенных вещей, но сейчас есть база данных! :) – Rudi

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