Problem Daten in Datenbank zu speichern...

  • Antworten:7
  • OffenNicht stickyNicht beantwortet

28.06.2012 07:27:49

Hallo und morgen,
ich habe (malwieder) ein Problem und zwar probiere ich eine datenbank zu erstellen. Klappt eigentlich auch ganz gut, nur in der Methode die die Daten in die Datenbank schreiben soll, bekomme ich beim return einen Fehler angezeigt.

hier mal der Code von der Betroffenen Methode

1public long createReminder(String title, String body, String reminderDateTime) { //long
2 ContentValues initialValues = new ContentValues();
3 initialValues.put(KEY_TITLE, title);
4 initialValues.put(KEY_BODY, body);
5 initialValues.put(KEY_DATE_TIME, reminderDateTime);
6
7
8 return mDb.insert(DATABASE_TABLE, null, initialValues); // java.lang.NullPointerException
9 }

Ich denke dass der Fehler eine NullPointerException beim return ist. Habe aber keine Idee wie ich das Problem löse. (Da in einer Datenbank keine leere zeile eingefügt werden kann, weise ich dieser extra den wert null zu [habs auch mit anderen werten probiert, selber fehler])

Hier mal der LogCat
106-28 05:23:16.725: W/KeyCharacterMap(331): No keyboard for id 0
206-28 05:23:16.725: W/KeyCharacterMap(331): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
306-28 05:23:18.115: D/dalvikvm(331): GC_EXTERNAL_ALLOC freed 68K, 52% free 2605K/5379K, external 2073K/2137K, paused 56ms
406-28 05:23:20.261: W/KeyCharacterMap(331): No keyboard for id 0
506-28 05:23:20.261: W/KeyCharacterMap(331): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
606-28 05:23:33.335: D/AndroidRuntime(331): Shutting down VM
706-28 05:23:33.335: W/dalvikvm(331): threadid=1: thread exiting with uncaught exception (group=0x40015560)
806-28 05:23:33.345: E/AndroidRuntime(331): FATAL EXCEPTION: main
906-28 05:23:33.345: E/AndroidRuntime(331): java.lang.NullPointerException
1006-28 05:23:33.345: E/AndroidRuntime(331): at de.schulplaner.terminplaner.RemindersDbAdapter.createReminder(RemindersDbAdapter.java:55)
1106-28 05:23:33.345: E/AndroidRuntime(331): at de.schulplaner.terminplaner.ReminderEditActivity.saveState(ReminderEditActivity.java:161)
1206-28 05:23:33.345: E/AndroidRuntime(331): at de.schulplaner.terminplaner.ReminderEditActivity.access$0(ReminderEditActivity.java:152)
1306-28 05:23:33.345: E/AndroidRuntime(331): at de.schulplaner.terminplaner.ReminderEditActivity$3.onClick(ReminderEditActivity.java:83)
1406-28 05:23:33.345: E/AndroidRuntime(331): at android.view.View.performClick(View.java:2485)
1506-28 05:23:33.345: E/AndroidRuntime(331): at android.view.View$PerformClick.run(View.java:9080)
1606-28 05:23:33.345: E/AndroidRuntime(331): at android.os.Handler.handleCallback(Handler.java:587)
1706-28 05:23:33.345: E/AndroidRuntime(331): at android.os.Handler.dispatchMessage(Handler.java:92)
1806-28 05:23:33.345: E/AndroidRuntime(331): at android.os.Looper.loop(Looper.java:123)
1906-28 05:23:33.345: E/AndroidRuntime(331): at android.app.ActivityThread.main(ActivityThread.java:3683)
2006-28 05:23:33.345: E/AndroidRuntime(331): at java.lang.reflect.Method.invokeNative(Native Method)
2106-28 05:23:33.345: E/AndroidRuntime(331): at java.lang.reflect.Method.invoke(Method.java:507)
2206-28 05:23:33.345: E/AndroidRuntime(331): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
2306-28 05:23:33.345: E/AndroidRuntime(331): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
2406-28 05:23:33.345: E/AndroidRuntime(331): at dalvik.system.NativeStart.main(Native Method)

Vielen Dank für Antworten! :)
lg Andreas

28.06.2012 10:00:07

Rafael K.
Harald Wilhelm
Sind eventuell mDb oder DATABASE_TABLE null?
Japp, würde sogar sicher auf mDb tippen.
Wäre es DATABASE_TABLE, würde die Exception in einer Android-Klasse bei der Verarbeitung fliegen.


ich weise mDb = mDbHelper.getWritableDatabase(); zu. dann sollte mDb doch eigentlich nicht mehr null sein oder?

28.06.2012 10:09:24

Dem Namen nach ist es eine Klassenvariable.
Dann hängt es davon ab ob du die andere Methode vorher aufrufst.

Ich würde die Datenbank evtl. einfach mal als lokale Variable in der Methode erzeugen, oder vor dem Zugriff auf null prüfen und ggf. initialisieren.

Gelöschter Account

28.06.2012 11:14:44

Andreas D.
ich weise mDb = mDbHelper.getWritableDatabase(); zu. dann sollte mDb doch eigentlich nicht mehr null sein oder?

Theoretisch kann doch auch das Ergebnis von "getWritableDatabase()" null ergeben. Kein Platz mehr für die Datenbank, zum Beispiel. Nicht das das sehr häufig vorkommen würde ...