Startseite › Foren › Deutsches LiveCode-Forum › Android App mit SQLite
- Dieses Thema hat 3 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 6 Jahren, 8 Monaten von Klaus Major.
-
AutorBeiträge
-
-
April 3, 2018 um 08:44 Uhr #5001
Hallo zusammen,
ich habe eine App mit Lese- und Schreibzugriff auf eine SQLite Datenbank erstellt. Diese läuft in der LiveCode-Entwicklungsumgebung und als Windows Standalone völlg korrekt.
Aber leider unter Android (4.0) nicht:
Lasse ich die Datenbank beim Starten des Programms unter Android – wie vielfach empfohlen – per Code mit „put url… into url…“ in den Ordner specialFolderPath(„documents“) kopieren, bekomme ich dann beim Zugriff auf die Datenbank die Fehlermeldung „database error, table fragen not found“, obwohl die Tabelle „fragen“ zu 100% sicher in der Datenbank ist.Ich habe daher zu Testzwecken die SQLite Datenbank „arbeitsplaner.db“ auf dem Tablet auf die SD Card in den Ordner „/mnt/sdcard/documents/ kopiert. In LiveCode habe ich als Standaloneeinstellungen „Allow external storage“ gewählt und „write external storage“ angekreuzt. Lieder funktionert im unten gezeigten Code die auskommentierte Zeile nicht, die aktive Zeile schon:
If the environment is „mobile“ then
— put specialFolderPath(„external documents“) & „/arbeitsplaner.db“ into gDatenPfad
put „/mnt/sdcard/documents/arbeitsplaner.db“ into gDatenPfad
else
put datenOrdner&“arbeitsplaner.db“ into gDatenPfad
end ifWeiß jemand, was ich flasch mache bzw. warum specialFolderPath(„external documents“) nicht funktioniert? Vielen Dank für einen weiterführenden Hinweis!
Wolf
-
April 3, 2018 um 12:46 Uhr #5005
Hallo Wolf,
das klingt so, als ob beim Kopieren in den Documents Ordner etwas nicht geklappt hat.
Dann erstellt LC mit „revopendatabase…“ nämlich eine neue und leere Datenbank-Datei, die natürlich noch keine TABLES etc. beinhaltet. Womit die Meldung „Table not found…“ auch wieder nicht gelogen ist.Überprüfe mal „the result“ direkt nach dem Kopieren:
…
put url („binfile:“ & Datenbank aus Resourcen Ornder) into url („binfile:“ & Datenbank im Dokumenten Ordner)
if the result <> EMPTY then
answer „Fehler:“ && the result
end if
…
Wichtig:
Das Android Betriebsystem ist wie iOS „case-sensitive“, also auf Groß-und Kleinschreibung achten!Gruß
Klaus
-
April 3, 2018 um 15:47 Uhr #5022
Hallo Klaus,
vielen Dank für Deinen Tipp, der war goldwert. Ich habe schon zwei Tage an diesen Problem herumgefummelt.
Der Fehler lag in der Tat beim Kopieren: Der Befehl
put url („binfile:“ & specialFolderPath(„engine“) & „/arbeitsplaner.db“) into url („binfile:“ & specialFolderPath(„documents“) & „/arbeitsplaner.db“)
hatte wohl eine leere Datenbank im Order „documents“ angelegt. Damit habe ich nicht gerechnet, denn ich hatte angenommen, dass, wenn das Kopieren fehlschlägt, irgendwie eine Fehlermeldung erscheint und im Zielordner keine Datenbank angelegt wird.
Richtig muss der Kopierbefehl heißen:
put url („binfile:“ & specialFolderPath(„engine“) & „/daten/arbeitsplaner.db“) into url („binfile:“ & specialFolderPath(„documents“) & „/arbeitsplaner.db“)
da ich bei den Standalone-Definitionen bei „Copy Files“ den Unterordner „daten“ als Speicherort der Datenbank angegeben hatte. Offenbar reproduziert das APK beim Installieren in Android im Ordner „engine“ die unter „Copy Files“ eingetragene Unterordnerstruktur.
Einfach, wenn man es weiß …
Herzlichen Dank!
Wolfgang -
April 3, 2018 um 15:55 Uhr #5024
Prima! 🙂
Wichtiger Tip:
Gewöhn dir an, specialfolderpath(„resources“) zu benutzen!Das ist unter Android und iOS zwar zufällig identisch mit specialfolderpath(„engine“), aber auf dem Desktop eben nicht!
Und somit müsstest Du in Deinen Skripts bei Bedarf unterscheiden zwischen Paltform Desktop oder Mobile! Dieser Aufwand entfällt mit specialfolderpath(„resources“), der ist wirklich „crossplatform“!
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.