2017-10-25 1 views
1

Ich habe eine Anwendung mit CN1 geschrieben, die auf eine SQLite db zugreifen. Wenn ich die App mit Netbeans im Emulator starte, funktioniert das einwandfrei. Aber wenn ich versuche, an die DB auf dem tatsächlichen Gerät anschließen ich diesen Fehler ...Codename One und SQLite Fehler

java,lang,NullPointerException: Attempt to invoke virtual method 'void.com.codename1.db.Database.close()' on a null object reference 

Ich habe durch meinen Code gewesen, um zu versuchen und sehen, ob ich einen ‚Schließen‘ mache, bevor ich habe sogar Ich habe die DB-Instanz erstellt und kann sie nicht sehen - und wenn ich das tun würde, würde ich erwarten, dass sie im Simulator versagt, oder?

Jede Hilfe

Dank

+0

Welchen Code verwenden Sie zum Öffnen der Datenbank? Der Pfad in den Logs ist eindeutig falsch –

+0

Ich bin mir nicht sicher, wie das funktioniert - also hier ist ein Link zu meinem Beispielcode ... https://docs.google.com/document/d/186Vuu1BRD-ItsWKtTx0Zjl6kB6TgCscv21_vYOd5aSQ/edit?usp = teilen --- auch wenn es falsch wäre, würde es im Emulator nicht funktionieren oder? –

+0

So habe ich gerade meinen Code debuggen und an einem Punkt kann ich die folgenden Werte sehen: conn.url = jdbc: sqlite: /home/stevenmarkintegration/.cn1/database/MyDB.db und conn.filename =/home/stevenmarkintegration /.cn1/database/MyDB.db .... jetzt würden diese Pfade nicht auf meinem Handy existieren - könnte das der Grund sein - oder bin ich weit weg? –

Antwort

1

In Ihrem Code schätzen Sie tun:

dbPath = Display.getInstance().getDatabasePath("MyDB.db"); 
if(dbPath != null && !FileSystemStorage.getInstance().exists(dbPath)) { 
     copyDb(dbPath); 
    } 
} 

Dann tun Sie:

db = Display.getInstance().openOrCreate(dbPath); 

was ein Fehler ist und ich bin ein Etwas überrascht funktioniert das im Simulator. Sie müssen verwenden:

db = Display.getInstance().openOrCreate("MyDB.db"); 

Ursprüngliche Antwort unten:

Wenn Sie Ihr Android-Gerät mit einem Kabel verbinden und schauen durch DDMS sollten Sie in der Lage sein, den vollen Stack-Trace des Fehlers zu sehen, die Sie zeigen würden zu der bestimmten Codezeile, die fehlschlägt.

Beachten Sie, dass dies auch mit crash protection ohne die Notwendigkeit von DDMS oder ein Kabel für diesen Fall funktionieren sollte.

+0

Danke Shai. Leider konnte ich DDMS nicht mit Netbeans für mich arbeiten lassen. Ich bin mir sicher, dass es nur mein Unverständnis ist –

+0

Sie können Ihre ursprüngliche Frage bearbeiten, indem Sie den Bearbeitungslink unten eingeben und einfach den Code einfügen. Dafür gibt es Knöpfe.Ich habe in Ihrem Dokument nachgesehen und meine Antwort geändert, um die Lösung für das Problem einzubeziehen. –

0

ich es geschafft, die Ursache des Problems mit dem „adb“ Befehl nach diesem YouTube-Tutorial zu finden: https://www.youtube.com/watch?v=3wMlCucwGvE

Als ich diese Anweisungen befolgt ich die folgende Ausgabe

10-27 08:14:12.580 3967 3986 E SQLiteDatabase: Failed to open database '/databases/MyDB.db'. 

10-27 08:14:12.580 3967 3986 E SQLiteDatabase: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 1294): Could not open database 

10-27 08:14:12.580 3967 3986 E SQLiteDatabase: ################################################################# 

10-27 08:14:12.580 3967 3986 E SQLiteDatabase: Error Code : 1294 (SQLITE_CANTOPEN_ENOENT) 

10-27 08:14:12.580 3967 3986 E SQLiteDatabase: Caused By : Specified directory or database file does not exist. 

10-27 08:14:12.580 3967 3986 E SQLiteDatabase: (unknown error (code 1294): Could not open database) 

10-27 08:14:12.580 3967 3986 E SQLiteDatabase:  ################################################################# 

Also dieser Ausgabe sehen konnte, - zusammen mit meiner ursprünglichen Fehlermeldung sagt mir, dass ich versuche, die db zu schließen, bevor ich es geöffnet habe.

So wirft diese beiden Fragen in meinem Kopf:

1] Howcome es perfekt in den Emulator funktioniert?

2] Muss ich prüfen, ob eine db geöffnet ist, bevor ich versuche, sie zu schließen?