App funktioniert nicht unter Android

Startseite Foren Deutsches LiveCode-Forum App funktioniert nicht unter Android

Ansicht von 16 Antwort-Themen
  • Autor
    Beiträge
    • #7593
      Markus_Reich
      Teilnehmer

        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

      • #7595
        Klaus Major
        Administrator

          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

        • #7607
          Markus_Reich
          Teilnehmer

            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

          • #7608
            Klaus Major
            Administrator

              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

            • #7614
              Markus_Reich
              Teilnehmer

                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 databaseConnect

                Lesen:

                command read_database
                local tData

                put 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_database

                Lesen bringt kein Ergebnis.

                Grüße

              • #7615
                Klaus Major
                Administrator

                  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

                • #7616
                  Markus_Reich
                  Teilnehmer

                    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 openStack

                    Der 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

                  • #7622
                    Klaus Major
                    Administrator

                      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

                    • #7623
                      Klaus Major
                      Administrator

                        Vielleicht postest Du auch mal Dein Kartenskript, in dem Du Dich mit der Datenbank verbindest.

                      • #7634
                        Markus_Reich
                        Teilnehmer

                          Hallo Klaus,

                          hier der Code des Cardscripts:

                          [Code]local sDatabaseID

                          command setDatabaseID pDatabaseID
                          put pDatabaseID into sDatabaseID
                          end setDatabaseID

                          function getDatabaseID
                          return sDatabaseID
                          end getDatabaseID

                          command 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 databaseConnect

                          command read_database
                          local tData

                          put 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 tMonat

                          if tMonat begins with „revdberr“ then
                          answer „Error:“ && tMonat
                          end if

                          put „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: Temperaturen

                          Muss die Endeung .db angegeben werden? Spielt Groß-/Kleinschreibung eine Rolle?

                          Gruße

                        • #7635
                          Klaus Major
                          Administrator

                            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

                          • #7636
                            Markus_Reich
                            Teilnehmer

                              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.db

                              Die Meldung „Fehler beim Kopieren:“ kamm einmal, jetzt nicht mehr. Nur halt die Meldung … Tabelle Temperaturen fehlt …

                              Grüße

                            • #7637
                              Klaus Major
                              Administrator

                                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?

                              • #7651
                                Markus_Reich
                                Teilnehmer

                                  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

                                • #7652
                                  Klaus Major
                                  Administrator

                                    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

                                  • #7661
                                    Markus_Reich
                                    Teilnehmer

                                      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.db

                                      Hier 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

                                    • #7662
                                      Klaus Major
                                      Administrator

                                        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

                                    Ansicht von 16 Antwort-Themen
                                    • Du musst angemeldet sein, um auf dieses Thema antworten zu können.