merkwürdige Exception mit android und SQLLite

Goldfish

Bekanntes Mitglied
Hey, ich bin mal wieder endgültig am Ende mit meinem Latein und weiß mir nicht merh weiter zu helfen. Google hilft mir da auch nicht wirklich, da ich eine unmögliche NullPointer habe...
Ich habe folgenden Code:

Java:
public class NetworkRequestListManager extends BaseDatabaseHandler implements Observer {
    private static NetworkRequestListManager networkRequestListManager = new NetworkRequestListManager();

    private NetworkRequestListManager () {
        super(Mobile4dApplication.getContext());
        NetworkObservableStatus.addNetworkListener( this );
    }

    ...

    public static synchronized void addElement(NetworkRequest networkRequest) {
        SQLiteDatabase db = networkRequestListManager.getWritableDatabase();

        ContentValues values = new ContentValues();
        try {
            values.put(BaseDatabaseHandler.networkRequest_type, networkRequest.getClass().getName());
            values.put(BaseDatabaseHandler.requires_login, networkRequest.isRequiresLogin() ? 1 : 0);
            values.put(BaseDatabaseHandler.networkRequest_timestamp, networkRequest.getTimestamp());
            values.put(BaseDatabaseHandler.networkRequest, networkRequest.toBlob());
        } catch (IOException e) {
            Log.e("addElement", "Exception: " + e.getMessage());
            e.printStackTrace();
        }
        Log.e("addElement", "number of NetworkRequests: " + getNumberOfRequests());
        Log.e("addElement", "db: " + db);
        Log.e("addElement", "TABLE_NETWORK_REQUEST: " + BaseDatabaseHandler.TABLE_NETWORK_REQUEST);
        Log.e("addElement", "ContentValues: " + values);
        db.insert(BaseDatabaseHandler.TABLE_NETWORK_REQUEST, null, values);
        db.close();

        if (NetworkObservableStatus.isNetworkConnectionAvailable()) {
            NetworkRequestListManager.startService();
        }
    }

    ...
}

In der Methode addElement erhalte ich eine NullPointerException in der Zeile:
db.insert(BaseDatabaseHandler.TABLE_NETWORK_REQUEST, null, values);
Die Ausgaben für meine Werte, wie sie oben im Code zu sehen sind, sehen wie folgt aus:

Java:
07-27 19:22:18.439: ERROR/addElement(10002): number of NetworkRequests: 0
07-27 19:22:18.439: ERROR/addElement(10002): db: android.database.sqlite.SQLiteDatabase@41989078
07-27 19:22:18.439: ERROR/addElement(10002): TABLE_NETWORK_REQUEST: networkRequestTable
07-27 19:22:18.447: ERROR/addElement(10002): ContentValues: timestamp=1406481738435 type=de.uni_bremen.network.userManagement.LoginRequest requires_login=0 network_request=[B@41992140

ich hab auch schon versucht den null-Wert gegen einen leeren String auszutauschen. Also:
db.insert(BaseDatabaseHandler.TABLE_NETWORK_REQUEST, "", values);
Gibt aber auch die gleiche NullPointerException.

Hat irgendwer vielleicht schonmal das gleiche Problem gehabt und kann mir hier helfen? ich weiß einfach nicht mehr weiter an der Stelle.
 
wie im Post oben schon erwähnt, liegt es nicht am übergebenen null, da ichs auch schon mit einem leeren String versucht habe, und trotzdem NullPointer. Der Witz ist allerdings, dass das Codestück vor einiger Zeit noch funktionierte... daran hat sich nichts geändert und auf einmal, gehts nicht mehr. Bei einer Operation, die schon tausend mal geklappt hat... ich schnalls echt nciht...
Aber heir der Stacktrace


Java:
07-27 19:22:18.814: ERROR/ACRA(10002): de.uni_bremen.activities fatal error : Could not execute method of the activity
        java.lang.IllegalStateException: Could not execute method of the activity
        at android.view.View$1.onClick(View.java:3073)
        at android.view.View.performClick(View.java:3540)
        at android.view.View$PerformClick.run(View.java:14167)
        at android.os.Handler.handleCallback(Handler.java:605)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4558)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
        at dalvik.system.NativeStart.main(Native Method)
        Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at android.view.View$1.onClick(View.java:3068)
        ... 11 more
        Caused by: java.lang.NullPointerException
        at android.database.sqlite.SQLiteStatement.releaseAndUnlock(SQLiteStatement.java:290)
        at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:115)
        at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1720)
        at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1593)
        at de.uni_bremen.network.networkServiceManagement.NetworkRequestListManager.addElement(NetworkRequestListManager.java:59)
        at de.uni_bremen.activities.LoginActivity.onLoginClicked(LoginActivity.java:106)
        ... 14 more
 
daran hat sich nichts geändert und auf einmal, gehts nicht mehr. Bei einer Operation, die schon tausend mal geklappt hat... ich schnalls echt nciht...

So ein Posting hatte ich schon mal heute. "Ich habe nix geändert". Das hilft leider nicht bei der Fehlersuche und ist zudem gelogen.


Was steht in Zeile:

SQLiteStatement.java:290

Maybe unterstützt die Datenbank kein Locking?
 
So ein Posting hatte ich schon mal heute. "Ich habe nix geändert". Das hilft leider nicht bei der Fehlersuche und ist zudem gelogen.

Nein, gelogen war das nicht. Die Codestelle ist unverändert. Das einzige, was sich geändert hat, ist der Klassenname. Und das seh ich nicht als Änderung an, da er zumal auch ncihts mit der Tabelle in SQL zu tun hat der Name.

Wenn ich auf den Sourcecode für SQLiteStatement.java:290 gehe, öffnet mir der IDE eine Klasse, die gerade mal 160 Zeilen hat -_-
Und ja, die Sources sind vorhanden, falls dies die nächste Frage sein sollte ^^
 
ich arbeite mit IntelliJ. Und ja, die App einmal zu deinstallieren und neu aufzuspielen kam mir auch schon in den Sinn. Ich hab sogar schon mittels Subversion auf einen Stand zurückgesetzt, wo es noch funktionierte ursprünglich und der Fehler fliegt trotzdem noch X.X

Ich habe keine Ahnung von Android, liest sich aber so, das die DB nicht offen ist?

Kann ich das irgendwie prüfen? bin gerade auf der Arbeit, daher kann ich das frühestens heute Abend prüfen, aber wäre gut zu wissen, wie ich das mache ^^
 
lol wtf?
Ich hab ne neue Klasse erzeugt, den Code, der mutmaßlich nicht funktionierte, in die neue Klasse kopiert, die Codestellen auf den neuen Klassennamen angepasst und es geht wieder -_-
Was fürn beknackter Mist ist das denn?
 
Deswegen entwickelt man Android ja in AS oder Eclipse 😀
Bis gerade wusste ich nicht mal das es nen Android Plugin für Netbeans gibt ^^

lg.
 
Manchmal hilft es (leider) ein "clean" auf das Projekt zu machen. Ich vermute, dass noch irgendwelche alten Klassen herumlagen und nicht richtig vom automatischen Build weggeputzt wurden.
 
Deswegen entwickelt man Android ja in AS oder Eclipse
Bis gerade wusste ich nicht mal das es nen Android Plugin für Netbeans gibt ^^

Ist mir auch neu, aber gut zu wissen, dass es eines für Netbeans gibt. Ich mach das ganze ja in IntelliJ und die Android-Unterstützung in IntelliJ ist wirklich grausig... Der einzige Grund, wieso ich das mit dem IDE mache ist, dass ich mit Eclipse nicht klar komme... habs tausend mal versucht und wollte jedes mal erneut Eclipse aus dem Fenster werfen, wäre das möglich gewesen ^^°

Manchmal hilft es (leider) ein "clean" auf das Projekt zu machen. Ich vermute, dass noch irgendwelche alten Klassen herumlagen und nicht richtig vom automatischen Build weggeputzt wurden.

Sollte ich eigentlich wirklich beherzigen, denn mit maven und AspectJ hatte ich derartige Probleme auch nicht gerade selten...
 
Zuletzt bearbeitet:
So wie das aussieht, kann das gut sein, dass die IntelliJ Unterstützung darauf basiert. Sieht zumindest stark danach aus und ich hab gerade nicht die Energie mich da durchzulesen, da ich mit anderen Dingen beschäftigt bin ^^.
Aber die Probleme die ich meine, sind folgende:

  1. Die Syntax zeigt permanent Fehler an Stellen an, wo keine sind. Beduetet so viel, wie Syntaxfehler werden angezeigt, aber übersetzen und laufen tut alles wunderbar. Ist aber echt nervig, dass das ganze Projekt immer mit Fehlern angezeigt wird, weils angeblich Syntaxfehler gibt... Das ist schon seid Monaten so und trotz diverser Bugreports haben dies noch immer nicht behoben -_-
  2. Wenn man ein großes Projekt hat und 2 Module des Projektes haben zufällig die gleiche Abhängigkeit von sagen wir bspw. commons-io. Dann wirft IntelliJ beim Übersetzen Fehler, weil die .jar-Datei 2 mal gefunden wurde... (okay kein direktes android Problem, aber saumäßig lästig...)
 
Sind es wirklich Fehler, oder ist es "nur" Androids LINT, das da meckert. So was gibt's mitunter auch in Eclipse... Und auch das mit den jars klingt vertraut (binde mal ein lib-Projekt ein, dass wie das Hauptprogramm die support-lib einbindet und die Versionen sind nicht identisch...).
 
nene, das sidn keine Fehler. Das ist wirklich nur das Syntax-Highlighting, dass da rumspinnt.
Also ich hatte es mal in Eclipse versucht einzubinden, das Projekt. Das war deutlich einfacher, weil Eclipse da nicht rumgeschriehen hat...
Aber aus dem Grund mach ich mittlerweile eigentlich auch schon alles mit maven, weil mir dieses rumgefrickel mit den jars zu lästig ist. Maven schafft da wirklich gute Abhilfe. Problem bei unserem Projekt ist nur, es wurde ursprünglich nicht als maven-Projekt angelegt und ich hab auch ehrlich gesagt zu wenig Plan vom Android-Bauvorgang, als dass ich das mal eben übersetzen könnte XD
 
Dazu setzt Android-Studio (wie übrigens auch OpenJDK/OpenJFX) fast nur noch auf Gradle. Glücklicherweise scheint es möglich zu sein, bei Gradle sowohl Maven-Dependencies, als auch Ant-Build-Tasks einzubinden. Darauf setzt Android bei Build. Muss man sich auch erst dran gewöhnen, allerdings hab ich damit unter Eclipse eigentlich dank dem ADT-Plugin nur in Ausnahmefällen etwas zu tun.
 
Jop Android mit Maven zu konfigurieren... war nich nett als ich es das letzte mal gemacht habe...

mit Gradle ist das sehr smooth und einfach wie ich finde 😉

lg. Dagobert
 

Zurück
Oben