Pfade unter Android — Knoten im Gehirn ….

Startseite Foren Deutsches LiveCode-Forum Pfade unter Android — Knoten im Gehirn ….

Schlagwörter: 

Ansicht von 17 Antwort-Themen
  • Autor
    Beiträge
    • #22111
      foto2004
      Teilnehmer

        Hallo Gemeinde,

        irgendwie verstehe ich das mit den Pfaden unter Android nicht. Es ist ein Buch mit 7 Siegel.

        ich habe vollenden Code im mainStack:

        on preOpenStack
           if the environment is "mobile" then
              put specialFolderPath("engine") into programmPfad
           else
              put the filename of this stack into programmPfad
              set the itemDelimiter to "/"
              delete the last item of programmPfad
           end if
           if the environment is "mobile" then
              put specialFolderPath("documents") & "/data/" into dataPfad
           else
              put programmPfad&"/data/" into dataPfad
           end if
           --put programmPfad&"/data/" into dataPfad
           if the platform is "MacOS" and the environment is "standalone application" then
              set the itemDelimiter to "/"
              put the filename of this stack into programmPfad
              put item 1 to -3 of programmPfad into dataPfad
              put "/Resources/_MacOS/data/" after dataPfad
           end if  
           
           put specialFolderPath("documents") & "/data/huhn.db" into tDatabaseFile
           
           if there is not a file tDatabaseFile then
              put url("binfile:" & specialFolderPath("engine") & "/data/huhn.db") into url("binfile:" & specialFolderPath("documents") & "/data/huhn.db")
           else
              answer "There is a file huhn.db"
           end if
           
           set the navigationArrows to false
        end preOpenStack

        wenn ich dann meine App auf das Android Tablett installiere kommt das:

        keine verbindung zur DB..
        Ich habe mir da mal einige Buttons gemacht wo ich die einzelnen Verzeichnisse abrufe.



        ich verstehe zwar dass ich meine DB in den Ordner Documents bringen muss. ….
        aber dann steht ich da wie der Ochse vorm neuen Scheunentor …..

        Kann mir das mal bitte einer erklären, aber bitte eine Erklärung für Dummis damit ich es auch mal kapiere. Bitte verzeiht mir meine Fragerei ich habe erst vor einigen Tagen mit LiveCode angefangen und auf dem englischen Forum habe ich mir schon einiges rausholen könne aber bei diesem Thema best es bei mir aus.

      • #22114
        Klaus Major
        Administrator

          Hallo Immanuel,

          habe diesen Post gerade erst freigeschaltet, also nicht wundern…

          Ganz wichtig:
          Alles, was wir über den “Copy files” Tab in den “Standalone Application Settings” unserer Runtime hinzufügen, finden wir dann in -> specialfolderpath(“resources”)
          ## specialfolderpath(“engine”) ist TABU!

          Dieser specialfolder funktioniert auch schon in der IDE und zeigt auf den Ordner mit dem aktuellen Stack!

          Im App-Package (APK) haben wir keine Schreibrechte, selbst das Öffnen einer Datanbank wird als “Schreiben” angesehen, daher müssen wior alles, was wir bearbeiten wollen/müssen zuerst in den Dokumentenordner des Users kopieren und dort bearbeien!

          Und da die Ordnerstruktur, sofern überhaupt vorhanden, auf Android niemadem so recht klar ist, MÜSSEN wir mit diversen specialfolderpath Codes arbeiten, da uns LC dieses Verantwortung auf diese Weise abnimmt. LC findet schon den richtigen Ordner!

          Mach es so:

          on preOpenStack 
             ## Von hier kopieren wir die DB
             put specialfolderpath("resources") & "/data/huhn.db" into tResFile
             
             ## Ordner müssen manuell angelegt werden, daher zuerst:
             if the environment = "mobile" then
                put specialFolderPath("documents") & "/data" into dataPfad
                if there is not a folder dataPfad then
                   create folder dataPfad
                end if
             end if
             
             ## Und hierhin kopieren wir sie:
             put dataPfad & "/data/huhn.db" into tDocFile
                
             if there is not a file tDocFile then
                put url("binfile:" & tResFile) into url("binfile:" & tDocFile)
             else
                answer "There is a file huhn.db"
             end if
             
             set the navigationArrows to false
          end preOpenStack

          Deine Datenbank findest Du nun in:
          -> specialfolderpath(“documents”) & “/data/huhn.db”

          Gruß

          Klaus

        • #22116
          Klaus Major
          Administrator

            Am besten erstellst Du Dir eine Funktion, die Dir immer den richtigen Pfad zur DB liefert!

            function dbPfad
              if the environment = "mobile" then
                return (specialfolderpath("documents") & "/data/huhn.db")
              else
              ## IDE:
                return (specialfolderpath("resources") & "/data/huhn.db")
              end if
            end dbPfad
          • #22121
            foto2004
            Teilnehmer

              OK danke Klaus ich schau mir das genau an und versuche es zu verstehen, aber ich denke ich sollte es hinbekommen. Muss nur jetzt alles Wetterfest machen.

            • #22122
              Klaus Major
              Administrator

                Bei Fragen unbedingt fragen!
                Ich hab noch eine Menge Antworten! 🙂

              • #22131
                foto2004
                Teilnehmer

                  OK da hab ich gleich noch eine 😉

                  Übrigens das klappt soweit nur habe ich mir da ein Bild eingebunden und wenn ich die Fläche vom Bild anklicke sollte ein Dialog aufgehen um ein Bild auszuwählen, was auch unter IDE OSX und WIN geht aber IOS und Android bekomme ich immer einen Fehler: unrecongnized token: “…pfad ….. /data/bild/answer file” wenn ich abspeichern möchte. Es tut sich auch kein Fenster auf wo ich ein File auswählen könnte es wird nur die Fläche etwas grau.

                  keine Ahnung was ich da beachten muss dass es unter den mobilen Geräten auch geht?

                • #22132
                  Klaus Major
                  Administrator

                    Auf der mobilen Platform gibt es keinen Dialog wie auf dem Desktop:
                    -> answer file “Bitte eine Datei auswählen:”

                    Da musst Du den User ein Bild aus seinem Album auswählen lassen mit -> mobilepickphoto

                    Oder, falls im “Documents” Ordner Bilder vorhanden sind, kannst Du dem User ein Listenfeld mit den Dateien im “Documents” Ordner anzeigen, wo der User ein Bild markieren/auswählen kann.

                  • #22136
                    foto2004
                    Teilnehmer

                      OK das klingt logisch. Danke werde ich gleich mal testen, oder doch erst morgen. Sitze schon zu lange davor.

                    • #22149
                      foto2004
                      Teilnehmer

                        Guten Morgen,

                        hab gerade ein wenig rumprobiert mit dem mobielepickphoto … hab auch deine Anleitung hier gefunden.

                        jetzt bekomme ich das bild auf die Card aber wie bekomme ich es aber in meinen “tFileName, damit ich es an der richtigen stelle anzeigen bzw (danke deiner Hilfe) abspeichern kann?

                        Anbei meine Versuche 😉

                        global programmPfad, dataPfad, connID, tFilename, BildKopie, tFileName, BildKopie
                        on mouseUp pButtonNumber
                           set the lockloc of the templateimage to true
                           set the width of the templateimage to 221
                           set the height of the templateimage to 221
                           set the left of the templateimage to "10"
                           set the top of the templateimage to "10"
                           
                           if the environment is "mobile" then
                              mobilePickPhoto "album"
                              put the filename of img "templateimage" into tFileName
                              --put last img into tFileName
                              --put it into tFileName
                           else
                              answer file "Bitte ein Bild auswählen" with type "Jpeg,PNG|jpg,png|"
                              if the result = "cancel" then
                                 exit mouseup
                              end if
                              put it into tFileName
                           end if
                           
                           set filename of image "imgBildNeu" to tFileName
                           # 1. Den eigentlichen Dateinamen ohne Pfad herausfinden:
                           set itemdel to "/"
                           put item -1 of tFileName into dateiname
                           # 2. Pfadnamen für die Kopie zusammenbasteln:
                           put dataPfad & "bild/" & dateiname into BildKopie
                           # 3. Nun die Datei kopieren:
                           --put url("binfile:" & tFileName ) into url("binfile:" & BildKopie)
                           --set filename of image "imgBildNeu" to BildKopie
                           answer tFileName
                           # 4. Fertig
                        end mouseUp
                        
                      • #22150
                        Klaus Major
                        Administrator

                          1. Keine Anfürhrungszeichen bei NUMMERN nötig, hast Du ja teilweise auch gemacht?

                          ...
                          set the height of the templateimage to 221
                          set the left of the templateimage to 10
                          set the top of the templateimage to 10
                          ...

                          2. mobilpickphoto erstellt eine Kopie des ausgewählten Bildes auf der aktuellen Karte!
                          Das ist dann -> last image
                          3. the templateimage ist ein “virtuelles” Bild (Vorlage), nach der danach alle neuen Bilder erstellt werden.
                          Das bedeutet, es gibt kein -> image “templateimage”!
                          Das hier funktioniert also nicht mit dem importieren (im gegensatz zu referenziert!) Bild. Es hat auch keinen Namen, den musst Du oder der User selber angeben:

                          ...
                          set filename of image "imgBildNeu" to tFileName
                          # 1. Den eigentlichen Dateinamen ohne Pfad herausfinden:
                          set itemdel to "/"
                          put item -1 of tFileName into dateiname
                          # 2. Pfadnamen für die Kopie zusammenbasteln:
                          put dataPfad & "bild/" & dateiname into BildKopie
                          # 3. Nun die Datei kopieren:
                          --put url("binfile:" & tFileName ) into url("binfile:" & BildKopie)
                          --set filename of image "imgBildNeu" to BildKopie
                          answer tFileName
                             # 4. Fertig
                          ...

                          Falls es wirklich eine externe Bilddatei werden soll, musst Du das Bild exportieren, bevor Du “the filename” irgendeines Bildes zu dem Pfad setzen kannst!

                          Bevor ich weiter helfen kann, erzähl mir bitte, was Du mit diesem Bild anfangen möchtest?

                          Gruß

                          Klaus

                        • #22152
                          foto2004
                          Teilnehmer

                            Danke erste mal für die Mühe,

                            nun ich möchte ein Bild auswählen (siehe angefügte Bilder, da ist derben dem DataGrid eine Bild-Fläche) und anschließend soll es in den Ordner /data/bild/ abgespeichert werden und der Pfad in die DB eingetragen werden.
                            danach soll mann im DataGrid durchblättern und es werde die jeweiligen Daten in den Feldern rechts und dem Bild-Feld (das Bild natürlich) angezeigt werden.

                            Das ganze klappt ja auch aber eben nur unter der IDE, WIN und OSX aber eben nicht unter IOS oder Android

                            ich hoffe du kannst meinen etwas umständlichen Ausführungen folgen.

                          • #22153
                            Klaus Major
                            Administrator

                              Aha, danke!

                              Dann mach es so:

                              ...
                              if the environment is "mobile" then
                                 mobilePickPhoto "album"
                                 ## Oder ASK den user ob des Namens
                              
                                 ## Ich hoffe JPG ist das Defaultformat!?
                                 put "ein schönes bild.jpg" into tBildname
                                 put specialfolderpath("documents") & "/" & tBildname into tFileName
                                 put last img into url("binfile:" & tFileName)
                              
                                 ## Optional:
                                 ## delete last img
                              else
                              ## Desktop
                              ...
                            • #22155
                              foto2004
                              Teilnehmer

                                Dankeschön, so hat das jetzt geklappt aber erst nach dem ich die Pfade manuell erstellt habe.

                              • #22156
                                Klaus Major
                                Administrator

                                  Was meinst Du mit: … aber erst nach dem ich die Pfade manuell erstellt habe?

                                • #22158
                                  foto2004
                                  Teilnehmer

                                    weil ich doch die Bilder in /data/bild/ haben möchte und diese musst ich erst manuell erstellen.

                                    Aber es funktioniert. Du bist einfach super. Ich werde dich im mein Abendgebet mit einschließen.

                                    Muss nur noch beim abspeichern ein paar zufällige Zeichen in den Dateinamen mit einbinden aber dass ist kein Problem. Hans ich als ich das Buch durchgearbeitet habe schon gemacht.

                                    Danke noch einmal.

                                  • #22159
                                    Klaus Major
                                    Administrator

                                      Ach so, selbstredend musst Du meine Beispiel noch an DEIN Projekt anpasssen. 😎

                                      Muss nur noch beim abspeichern ein paar zufällige Zeichen in den Dateinamen mit einbinden

                                      Um die Eindeutigkeit des Dateinamens zu garantieren?
                                      Nimm doch -> the seconds
                                      Oder auch -> uuid()

                                      Also:

                                      put “Ein Bild_” & the seconds & “.jpg” into tBildname
                                      ## Auf diese Weise könntest Du dann später noch das Speicherdatum
                                      ## des Bildes wieder hearusfinden, sofern nötig!

                                      put “Ein Bild_” & uuid() & “.jpg” into tBildname

                                      Das garantiert einmalige Dateinamen!

                                      Und schau Dir auch meine Antwort hierzu an -> mehrzeiliger Text von sqlite in DataGrid?

                                    • #22161
                                      foto2004
                                      Teilnehmer

                                        Danke das ist eine gute Idee.

                                        Das mit deiner Antwort auf das mit dem DataGrid muss ich noch ein wenig durchkauen biss ich es verstehe. Wird noch ein paar Tage dauern. Aber danke auch dafür und die Ausführliche Antwort.
                                        Die Lernkurve hier ist extrem steil und das ist gut so.

                                      • #22162
                                        Klaus Major
                                        Administrator

                                          Leider sind Datagrids die komplexesten Objekte in LC, was Skripting angeht!
                                          Die sehen allerdings sofort gut aus! 😀

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