Startseite › Foren › Deutsches LiveCode-Forum › App funktioniert nicht unter Android
- Dieses Thema hat 16 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 6 Jahren, 3 Monaten von Klaus Major.
-
AutorBeiträge
-
-
September 10, 2018 um 23:16 Uhr #7593
Hallo Forum,
habe eine App erstellt die Werte aus einer SQLite-DB liest und in einem Graph anzeigt. Die DB liegt im selben Verzeichnis. Unter Windows funktioniert die App.
Habe die APK-Datei auf ein Android – Tablet übertragen und installiert. Hier funktioniert die Anzeige, (das Lesen der DB?), nicht – es erfolgt auch keine Fehlermeldung, wie z.B DB wird nicht gefunden. Wie kann man denn feststellen ob die DB installiert wurde bzw. warum sie nicht gefunden wird?
Grüße
-
September 11, 2018 um 00:55 Uhr #7595
Wo genau liegt denn die Datenbank Datei? Innerhalb des APK Bundles haben wir keine Schreibrechte, Du musst sie in den Dokumenten-Ordner kopieren und dort öffnen!
Ist dem so?
Gib kurz Laut, dann erkläre ich Dir, wie Du vorgehen musst. 🙂Gruß
Klaus
-
September 11, 2018 um 17:19 Uhr #7607
Hallo Klaus,
die App ist so programmiert, dass die DB im selben Verzeichnis liegen soll.
Unter Windows im selben Verzeichnis wie die *.exe. Hier wird die DB ja gefunden.Unter Android kann ich die DB mit dem Total Commander nicht finden. Sie liegt definitiv nicht in ..\Documents.
Grüße
-
September 11, 2018 um 17:34 Uhr #7608
Hi Markus,
Sie liegt definitiv nicht in ..\Documents.
von selber kriecht sie auch nicht dahin. 🙂
Die datei liegt noch im PAK Bundle, wo wir nicht schreiben dürfen, und das Oeffnen einer Datenbankdatei wird bereits als Schreiben gewertet.Ich nehme an, Du hast die DB-Datei über „Copy files“ in den „Standalone Builder Settings“ hinzugefügt, korrekt?
Dann musst Du bei Starten der App prüfen, ob diese Datei bereits in den Docs Ordner kopiert wurde, wenn nein, machen, wenn ja, dort öffnen.
Ungefähr so, am besten „on openstack“
... ## Deine mitgelieferte DB-Datei innerhalb des APK Package ist hier zu finden: put specialfolderpath("resources") & "/deine_db_datei.db" into tQuellDatei ## Hier muss sie hin, denn hier dürfen wir schreiben! put specialfolderpath("documents") & "/deine_db_datei.db" into tZielDatei ## Check ob Datei schon vorhanden = App startet nicht zum ersten Mal ## Noch nicht vorhanden, also rüberkopieren: if there is not a file tZielDatei then put url("binfile:" & tQuellDatei) into url("binfile:" & tZielDatei) end if ...
Nun kannst Du -> tZielDatei mit revOpenDatabase öffnen und benutzen.
-> specialfolderpath(„documents“) & „/deine_db_datei.db“
Klar soweit? 🙂Gruß
Klaus
-
September 11, 2018 um 21:50 Uhr #7614
Hallo Klaus,
die DB „graphik“ (SQLite DB ohne Endung) ist jetzt in „documents“. Habe diese dorthin kopiert.
Oeffnen:
command databaseConnect
local tDatabasePath, tDatabaseID
put specialfolderpath(„documents“) & „/graphik“ into tDatabasePath
put revOpenDatabase(„sqlite“, tDatabasePath, , , , ) into tDatabaseID
setDatabaseID tDatabaseID
end databaseConnectLesen:
command read_database
local tDataput 2 into schluessel
put getDatabaseID() into tDatabaseID
put „SELECT Monat from Temperaturen WHERE Lfd_Nr=“ & schluessel into tSQL
— query the database
put revDataFromQuery(tab,return,tDatabaseID,tSQL) into tMonat
…….
end read_databaseLesen bringt kein Ergebnis.
Grüße
-
September 11, 2018 um 22:19 Uhr #7615
Hi Markus,
wir reden hier vom „Documents“ Ordner auf dem Device, nicht auf dem Desktop!
die DB „graphik“ (SQLite DB ohne Endung) ist jetzt in „documents“. Habe diese dorthin kopiert.
Du hast also mein Skript oben benutzt, um bei Bedarf Deine DB Datei in besagten Ordner zu kopieren, korrekt?
Dann Bitte prüfen, ob „revdatafromquery()“ keinen Error liefert!
... put revDataFromQuery(tab,return,tDatabaseID,tSQL) into tMonat if tMonat begins with "revdberr" then answer "Error:" && tMonat end if ...
Eventiuell gibt das einen Hinweis.
Gruß
Klaus
-
September 11, 2018 um 23:51 Uhr #7616
Hallo Klaus,
hatte zuvor nicht das Skript benutzt zum Kopieren der DB.
Jetzt steht im StackScript:
on openStack
## Deine mitgelieferte DB-Datei innerhalb des APK Package ist hier zu finden:
put specialfolderpath(„resources“) & „/graphik.db“ into tQuellDatei## Hier muss sie hin, denn hier dürfen wir schreiben!
put specialfolderpath(„documents“) & „/graphik.db“ into tZielDatei## Check ob Datei schon vorhanden = App startet nicht zum ersten Mal
## Noch nicht vorhanden, also rüberkopieren:
if there is not a file tZielDatei then
put url(„binfile:“ & tQuellDatei) into url(„binfile:“ & tZielDatei)
end if
end openStackDer restliche Code, der beim Klick auf die Buttons ausgeführt werden soll, steht im CardScript.
In den Standalone Application Settings ist unter CopyFiles die graphik.db mit Add Files eingetragen worden.Ich übertrage die APK Datei nach My Documents und installiere diese mit den Total Commander. Es kommt eine Meldung Von Play Protect blockiert. Mit Trotzdem installieren wird die App erfolkreich installiert.
Beim Ausführen der App wird die DB nicht nach documents übertrfagen. Die Fehlermeldung beim Lesen:
Error revdberr DatabaseError No such table: Temperaturen
(natürlich ist die Tabelle in der DB)Auch ein Kopieren von Hand bringt nichts.
Grüße
-
September 12, 2018 um 08:36 Uhr #7622
Hi Markus,
ich selber besitze weder Handy noch Tabel und entwickle nicht für die mobile Platform.
Daher kann ich so etwas leider nicht testen.Aber ich denke, „My Documents“ ist nicht der „documents“ Ordner Deines Programms.
Das ist ein abgeschotteter Bereich innerhalb Deines Programms (Sandboxing).Mach bitte Folgendes:
In Deinem Kartenskript prüfen, ob die Datei überhaupt vorhanden ist.
Wenn sie es nicht ist, erstellt „revopendatabase…“ eine neue und leere Datenbakdatei, in der es die Tabelle „Temperaturen“ natürlich nicht gibt. Und das bedeutet, da ist etwas völlig schiefgelaufen.Am bessten beides prüfen:
1. Das Kopieren der DB Datei selber:... if there is not a file tZielDatei then put url("binfile:" & tQuellDatei) into url("binfile:" & tZielDatei) if the result <> EMTPY then anser "Fehler beim Kopieren:" & CR & the result end if end if ...
2. Im Kartenskript vor „revopendatabase…“
... put specialfolderpath("documents") & "/graphik.db" into tZielDatei if there is NOT a file tZielDatei then answer "DB Datei nicht vorhanden!" exit to top end if revopendatabase... ...
Vielleicht gibt das Auskunft darüber, was falsch läuft.
Gruß
Klaus
-
September 12, 2018 um 08:49 Uhr #7623
Vielleicht postest Du auch mal Dein Kartenskript, in dem Du Dich mit der Datenbank verbindest.
-
September 12, 2018 um 23:36 Uhr #7634
Hallo Klaus,
hier der Code des Cardscripts:
[Code]local sDatabaseID
command setDatabaseID pDatabaseID
put pDatabaseID into sDatabaseID
end setDatabaseIDfunction getDatabaseID
return sDatabaseID
end getDatabaseIDcommand databaseConnect
local tDatabasePath, tDatabaseID## gebraucht wenn db im selben Verzeichnis
## set itemDel to „/“
## set the defaultFolder to item 1 to -2 of (the effective fileName of this stack)## The database must be in a writeable location
put specialfolderpath(„documents“) & „/graphik.db“ into tDatabasePath
put specialfolderpath(„documents“) & „/graphik.db“ into tZielDatei
if there is NOT a file tZielDatei then
answer „DB Datei nicht vorhanden!“
exit to top
end if
## Open a connection to the database
## If the database does not already exist it will be created
put revOpenDatabase(„sqlite“, tDatabasePath, , , , ) into tDatabaseID## Store the database id so other handlers can access it
setDatabaseID tDatabaseID
end databaseConnectcommand read_database
local tDataput 2 into schluessel
put 0 into x
put getDatabaseID() into tDatabaseID
repeat while schluessel <=13
add 1 to x
put „SELECT Monat from Temperaturen WHERE Lfd_Nr=“ & schluessel into tSQL
— query the database
put revDataFromQuery(tab,return,tDatabaseID,tSQL) into tMonatif tMonat begins with „revdberr“ then
answer „Error:“ && tMonat
end ifput „SELECT Grade_1 from Temperaturen WHERE Lfd_Nr=“ & schluessel into tSQL
— query the database
put revDataFromQuery(tab,return,tDatabaseID,tSQL) into tGrade_1
put „SELECT Grade_2 from Temperaturen WHERE Lfd_Nr=“ & schluessel into tSQL
— query the database
put revDataFromQuery(tab,return,tDatabaseID,tSQL) into tGrade_2
put tMonat & „,“ & tGrade_1 & „,“ & tGrade_2 into tData[x]
add 1 to schluessel
end repeat
put tData[1] & return & tData[2] & return & tData[3] & return & tData[4] & return & tData[5] & return & tData[6] & return & tData[7] & return & tData[8] & return & tData[9] & return &tData[10] & return &tData[11] & return & tData[12] into tData
set the graphData of widget „Line Graph“ to tData
end read_database
[/Code]Habe deine oben erwähnten Prüfungen eingebaut. Keine der beiden zeigt eine Meldung.
Die Fehlermeldung weiterhin:
Error revdberr DatabaseError No such table: TemperaturenMuss die Endeung .db angegeben werden? Spielt Groß-/Kleinschreibung eine Rolle?
Gruße
-
September 12, 2018 um 23:51 Uhr #7635
Hallo Markus,
Muss die Endung .db angegeben werden? Spielt Groß-/Kleinschreibung eine Rolle?
die Endung ist völlig egal, aber Groß- und Kleinschreibung unter Android und iOS nicht,
da diese OSse „case-sensitive“ sind“!Hm, Skript sieht gut aus, obwohl Du einige unbenutzte Variablen drin hast.
Kannst Du auch bitte noch einmal das Stackskript posten?Hinweis:
RETURN kannst Du abkürzen als CR, spart Dir sicher eine Menge Tiparbeit 🙂Gruß
Klaus
-
September 13, 2018 um 00:32 Uhr #7636
Hallo Klaus,
das Stackscript:
on openStack ## die mitgelieferte DB-Datei innerhalb des APK Package ist hier zu finden: put specialfolderpath("resources") & "/graphik.db" into tQuellDatei ## Hier muss sie hin, denn hier dürfen wir schreiben! put specialfolderpath("documents") & "/graphik.db" into tZielDatei answer tQuellDatei & " - " & tZieldatei ## Check ob Datei schon vorhanden = App startet nicht zum ersten Mal ## Noch nicht vorhanden, also rüberkopieren: if there is not a file tZielDatei then put url("binfile:" & tQuellDatei) into url("binfile:" & tZielDatei) if the result <> EMTPY then answer "Fehler beim Kopieren:" & CR & the result end if end if end openStack
In der Version vor meinem letzten Post war ein Fehler drin (answer), deshalb keine Fehlermeldung. Lasse mir inzwischen die Verzeichnisse anzeigen (auf Android Tablet):
Quelle: /data/app/com.Softwareentwicklung.Techgraph-1/base.apk/graphik.db
Ziel: /data/user/0/com.softwareentwicklung.Techgraph/files/graphik.dbDie Meldung „Fehler beim Kopieren:“ kamm einmal, jetzt nicht mehr. Nur halt die Meldung … Tabelle Temperaturen fehlt …
Grüße
-
September 13, 2018 um 00:50 Uhr #7637
Was hat denn die Fehlermeldung angezeigt ausser „Fehler beim kopieren:“?
DAS müssten wir wissen.Ansonsten sieht alles korrekt aus.
Und Du hast wirklich alles vom Tablet entfernt, bevor Du eine neue APK installiert hast? -
September 13, 2018 um 23:55 Uhr #7651
Guten Abend,
Die Fehlermeldung lautet nur: Fehler beim Kopieren:
Diese Meldung kommt auch nur beim ersten Start nach dem Installieren.Vor einer Neuinstallation habe ich nur die App deinstalliert. Kann eine graphik.db mit dem TotalCommander nicht finden. Den Ordner /data/…. kann ich nicht öffenen mit dem TotalCommander.
Wieso eigentlich diese Quell- und Zielordner?
Habe die apk in My Dokuments oder Doawnload kopiert. Das Ziel sollte der graphik.db sollte doch documents sein?Grüße
-
September 14, 2018 um 01:46 Uhr #7652
Hi Markus,
ups, ich hatte einen Schreibfehler in meinem Skript:
…
## if the result <> EMTPY then
## Sollte LEER heissen und nicht LERE!? 😎
if the result <> EMPTY then
…
Bitte korrigieren, noch einmal testen und gucken, ob diese Meldung wieder
kommt beim ersten Start der App.Nur die App zu deinstallieren sollte reichen.
Leider habe ich keine Ahnung wo und wie genau LC diese diversen specialfolderpath()
unter ANDROID „mapped“, also wo genau die liegen, tut mir leid.Gruß
Klaus
-
September 14, 2018 um 11:06 Uhr #7661
Hallo Klaus,
if the result <> EMPTY then answer "Fehler beim Kopieren:" & CR & the result end if
Jetzt kommt die Fehlermeldung nicht mehr.
Die Ordner unter Win (hier läuft die App):
Quelle:/MyLiveCode8/Fuenftes_Pr/graphik.db
Ziel:/Users/xxxxx/Documents/graphik.dbHier war zwischenzeilich das Problem, dass im Zielordner eine leere graphik.db angelegt war. Nachdem ich diese gelöscht habe, wird die benötigte kopiert.
Kann es sein, dass auf Android der Ordner data inkl. Unterordner nicht beschrieben werden können? Mit dem TotalCommander können diese Ordner ja auch nicht geöffnet werden.
Der Pfadname wird gebildet u.a. aus dem Eintrag in den Standalone Application Settings; Android: Identifier.
Apps auf meinem Tablet sind m.E. unter Android/data … installiert
Grüße
-
September 14, 2018 um 12:08 Uhr #7662
Hallo Markus,
tut mir leid, so genau kenne ich die Innereien eines mobilen Devices nicht.
Kann es sein, dass auf Android der Ordner data inkl. Unterordner nicht beschrieben werden können?
In dem Fall sollte THE RESULT ja eben nicht leer sein und vielleicht einen Hinweis auf diese Tatsache liefern. Sorry, mir gehen die Ideen aus…
Gruß
Klaus
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.