У меня есть подкласс SQLiteDatabaseOpenHelper
называется DatabaseSuper
, который подменяет onCreate
и onUpdate
методы. DatabaseController
класс является подклассом DatabaseSuper
, который предназначен для реализации всех действий базы данных конкретных приложений.Подкласс SQLiteDatabaseHelper бросает NullPointerException, когда называет getReadebleDatabase()
Моя проблема в том, что я звоню getReadableDatabase()
по методу в DatabaseController
классу, это составляет Nullpointer exceptio
n. Но если я передаю объект SQLiteDatabase
в качестве параметра к этому методу, который берется из базового класса (DatabaseSuper)
, никакое исключение не выбрасывается.
Метод
public String sendDate(SQLiteDatabase db) {
//SQLiteDatabase db = getReadableDatabase(); *line 1*
Cursor cursor = db.rawQuery("select date from todo", null);
StringBuffer stringBuffer = new StringBuffer();
while (cursor.moveToNext()) {
String date = cursor.getString(0);
stringBuffer.append(date + ":");
}
cursor.close();
return stringBuffer.toString();
}
метод вызова из класса активности
String data = dataControllerObject.sendDate(new DatabaseSuper(this).getReadableDatabase());
Ошибка
06-18 04:28:50.239: E/AndroidRuntime(5147):
FATAL EXCEPTION: main
06-18 04:28:50.239:
E/AndroidRuntime(5147):
java.lang.RuntimeException:Unable to start activity ComponentInfo{com.example.dolist/com.example.dolist.SearchListView}:
java.lang.NullPointerException
06-18 04:28:50.239: E/AndroidRuntime(5147):
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
06-18 04:28:50.239:
E/AndroidRuntime(5147):
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
06-18 04:28:50.239: E/AndroidRuntime(5147):
at android.app.ActivityThread.access$600(ActivityThread.java:141)
06-18 04:28:50.239: E/AndroidRuntime(5147):
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
06-18 04:28:50.239: E/AndroidRuntime(5147):
at android.os.Handler.dispatchMessage(Handler.java:99)
06-18 04:28:50.239: E/AndroidRuntime(5147):
at android.os.Looper.loop(Looper.java:137)
06-18 04:28:50.239: E/AndroidRuntime(5147):
at android.app.ActivityThread.main(ActivityThread.java:5041)
06-18 04:28:50.239: E/AndroidRuntime(5147):
at java.lang.reflect.Method.invokeNative(Native Method)
06-18 04:28:50.239: E/AndroidRuntime(5147):
at java.lang.reflect.Method.invoke(Method.java:511)
06-18 04:28:50.239: E/AndroidRuntime(5147):
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-18 04:28:50.239: E/AndroidRuntime(5147):
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-18 04:28:50.239: E/AndroidRuntime(5147):
at dalvik.system.NativeStart.main(Native Method)
06-18 04:28:50.239: E/AndroidRuntime(5147):
Caused by: java.lang.NullPointerException
06-18 04:28:50.239: E/AndroidRuntime(5147):
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
06-18 04:28:50.239: E/AndroidRuntime(5147):
at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)
06-18 04:28:50.239: E/AndroidRuntime(5147):
at com.example.dolist.DataController.sendDate(DataController.java:37)
06-18 04:28:50.239: E/AndroidRuntime(5147):
at com.example.dolist.SearchListView.onCreate(SearchListView.java:34)
06-18 04:28:50.239: E/AndroidRuntime(5147):
at android.app.Activity.performCreate(Activity.java:5104)
06-18 04:28:50.239: E/AndroidRuntime(5147):
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
06-18 04:28:50.239: E/AndroidRuntime(5147):
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
06-18 04:28:50.239: E/AndroidRuntime(5147):
... 11 more
Используйте 'this.getReadableDatabase();' вместо 'getReadableDatabase();' – Pankaj