Wie lädt man eine Variable in eine TXT-Datei auf dem Server (Android)

Startseite Foren Deutsches LiveCode-Forum Wie lädt man eine Variable in eine TXT-Datei auf dem Server (Android)

Ansicht von 11 Antwort-Themen
  • Autor
    Beiträge
    • #1791
      Tim K
      Teilnehmer

        Hallo zusammen,

        für meine App habe ich eine TXT-Datei auf den Server geladen, die diverse Zeilen mit komma-getrennten Werten enthält. Der Inhalt der Datei wird in eine Variable geladen. Pro Zeile wird dann ein Button erzeugt, dem aus den Werten verschiedenen Custom Properties zugewiesen werden. Dies funktioniert einwandfrei.

        Auf einer Karte habe ich ein Formular, mit dem eine neue Zeile bzw. ein neuer Button hinzugefügt werden soll. Dazu fasse ich die Formularfelder zusammen und füge sie der vorhandenen Variable hinzu und sortiere die Variable alphabetisch. Bis hier hin klappt alles.

        Dann soll die Variable wieder in die TXT-Datei geschrieben werden, damit auf der Übersichtsseite aus der ergänzten Liste wieder die Buttons inkl. des neu angelegten erzeugt werden können.

        Im LiveCode Run Mode funktioniert alles wie gewünscht, aber auf dem Telefon mit Android 7.0 wird die Variable nicht hochgeladen.

        Versuch 1: Put

        Put meineliste into URL “http://meineurl.de/meineliste.txt”
        Der Befehl wird nicht ausgeführt (glaube ich)

        Ich habe einen FTP-User angelegt. Bei Username und Passwort handelt es sich nicht um Variablen, sondern nur um Platzhalter, um das hier nicht zu veröffentlichen.

        put textEncode(meineliste,”UTF-8″) into URL “ftp://Username:Passwort@ftp.strato.de/meineliste.txt”
        Dies bringt die App zum Abstürzen

        Versuch 2: libURLftpUpload
        In den Standalone Application Settings, Tab “Inclusions” habe ich die “Internet Library” ausgewählt.

        Strato Usernamen enthalten ein @ und ich habe gelesen, dass man dann URLEncode verwenden muss:

        put URLEncode(“Username@meinserver.de”) into userName
        put “ftp://” & userName & “:Passwort@ftp.strato.de/meineliste.txt” into listenuploader

        (Ich habe das auch ohne URLEncode probiert, mit dem gleichen Ergebnis).

        Der “Speichern”-Button macht dann:

        put return & fld “1”&”,”& fld “2”&”,”&fld “3”&”,”&fld “4”&”,”& fld “5”&”,”& fld “6”&”,”& fld “7” into neuereintrag
        put neuereintrag after meineliste
        sort lines of meineliste ascending
        put textEncode(meineliste,”UTF-8″) into uploadliste
        libURLSetStatusCallback “uploadProgress”, the long ID of me
        libURLftpUpload uploadliste,listenuploader,”uploadComplete”

        Der uploadProgress wird in einem Feld angezeigt, uploadComplete leert das Formular.

        Im LiveCode Run Mode werden mehrere Stati angezeigt bis “uploaded”, hat also funktioniert. Auch “uploadComplete” wird ausgeführt.

        Unter Android wird im uploadProgress überhaupt nichts angezeigt, die App scheint nicht einmal zu versuchen, den Server zu erreichen. uploadComplete wird natürlich auch nicht ausgeführt.

        Ich wäre wirklich dankbar, wenn mir jemand einen Tipp geben könnte, wo der Fehler liegen könnte.

        Danke und schönen Gruß
        Tim

      • #1797
        Klaus Major
        Administrator

          Hi Tim,

          1. Put meineliste into URL “http://meineurl.de/meineliste.txt”
          Das geht natürlich nicht, und wenn Du einmal genau nachdenkst, DARF sowas auch garnicht funktionieren! 😉

          2. put textEncode(meineliste,”UTF-8″) into URL “ftp://Username:Passwort@ftp.strato.de/meineliste.txt”
          Das SOLLTE eigentlich funktionieren! Bitte stelle sicher, daß es nciht der Angabe eines weitern (Unter-)Ordner bedarf!

          Auf meinem Server liegt auch alles unter “ftp.blabla.com”, aber im Unterordner “public_html”, also
          “ftp.blabla.com/public_html”. Check das mal mit einem FTP-Client.

          Allerdings sollte die App nicht abstürzen!

          3. libURLftpUpload uploadliste,listenuploader,”uploadComplete”
          Ein Blick ins Dictionary zeigt, daß diese LibURLFTP Befehle nur auf dem Desktop unterstützt werden, woll?! 😎

          Wie gesagt, tippe auf meine Vermutung unter 2.

          Gruß

          Klaus

        • #1813
          Tim K
          Teilnehmer

            Hi Klaus,

            danke für die Antwort und den Hinweis, dass put der richtige Weg ist. Dann weiß ich erst mal, wo ich weiter machen sollte.

            1. Dass das funktioniert, habe ich auch nicht erwartet 😉 Es war auch nicht der erste Versuch, viel mehr der Verzweiflung geschuldet als das mit FTP nicht funktioniert hat. Mein Text oben liest sich wohl auch so, als wenn ich nur 2 Versuche gestartet hätte, die tatsächliche Zahl liegt aber irgendwo zwischen 50 und 100…

            2. Der Pfad auf die Datei sollte stimmen, da ich dem FTP-User den Unterordner als Startordner gegeben habe. In LiveCode selbst funktioniert es ja auch. Ich habe aber jetzt auch mal den Startordner geändert und den kompletten Pfad angegeben. Außerdem habe ich sämtlichen anderen Code entfernt, nur um sicher zu gehen, mit dem gleichen Ergebnis: Die App stürzt ab.

            Muss man vielleicht in den Einstellungen der App irgendwo angeben, dass die App Daten hochladen können muss? – Vermutlich habe ich da einen ganz primitiven Anfänger-Fehler drin.

            3. Danke für den Hinweis. Ich habe dazu nur die Lesson durchgearbeitet. Da findet sich keine Warnung, dass das auf dem Telefon generell nicht funktioniert und ich dachte, mit der Fortschrittsanzeige könnte ich herausfinden an welcher Stelle des Uploads die App sich verabschiedet.

            Nochmals Danke und schönen Gruß
            Tim

          • #1814
            Klaus Major
            Administrator

              Hi Tim,

              1. das war mir schon klar! 😉

              2. Hm, das ist seltsam!?
              Hast Du bei den “Standalone Builder Settings” auch alles Wichtige angekreuzt?
              Ich mache das immer manuell, da der Automatismus “Suche nach Inclusionen” nicht immer zu 100% funktioniert, wie ich festgestellt habe. Probiere das mal aus.

              3. Ich fürchte die Lektionen sind teilweise etwas älter als die “Mobile” unterstützung vorn Livecode 😀

              Liebe Grüße

              Klaus

            • #1815
              Tim K
              Teilnehmer

                Hi Klaus,

                dann mal ne “blöde” Frage: welche sind denn die Wichtigen?

                Ich hatte die automatische Auswahl ausgeschaltet, um sicherzustellen, dass “Internet” dabei ist für libURLftpUpload. Mit automatischer Auswahl läufts aber auch nicht besser.

                Die App macht eigentlich nichts besonderes. Alles was sich innerhalb der App abspielt funktioniert einwandfrei, nur der Kontakt nach außen klappt nicht so richtig:

                Daten herunterladen mit load funktioniert
                Variablen wieder hochladen auf Klick funktioniert nicht
                Daten in lokale Dateien schreiben funktioniert derzeit nicht (damit habe ich mich aber auch noch nicht im Detail auseinandergesetzt)

                Wenn es wenigstens in LiveCode auch nicht funktionieren würde… 😉

                Schönen Gruß
                Tim

              • #1819
                Klaus Major
                Administrator

                  Hi TIm,

                  wie Du schon sagtest, “Internet” ist das Wichtigste, sowie alle verwendeten Widgets.

                  Dateien lokal schreiben:
                  Das dürfen wir unter iOS und Android NUR in -> specialfolderpath(“documents”)!

                  Sorry, zum Absturz Deiner Anwendung bei FTP-Zugriff fällt mir im Moment nichts Brillantes ein…

                  Gruß

                  Klaus

                • #1833
                  Tim K
                  Teilnehmer

                    Hi Klaus,

                    danke für die Hilfe, das hat mich auf jeden Fall weiter gebracht.

                    Ist ein normales Field ein Widget, das man bei Inclusions hinzufügen muss?

                    Ich habe jetzt einen neuen Stack angelegt, der nichts enthält außer 3 Feldern und einem Button, der nur 2 Eingabefelder in eine Variable steckt und dann den gleichen “put” Befehl ausführt, wie der andere (nur auf eine andere Datei). Außerdem schreibt er die Variable in das 3. Feld, um zu prüfen, ob die Variable den richtigen Wert enthält (was sie tut).

                    Ergebnis: Die App stürzt nicht ab. Die Datei wird auf dem Server angelegt, der FTP Zugang funktioniert wohl. Allerdings ist die Datei leer, der Text wird nicht hineingeschrieben.

                  • #1834
                    Klaus Major
                    Administrator

                      Hi Tim,

                      nein, ein “normales” Feld ist ein LC Object, kein Widget.
                      “Native” Eingabefelder, die Du mit “controlcreate…” erstellt, sind das auch nicht.

                      Da ich selber nicht für die mobile Platform entwickle, besitze noch nicht einmal ein handy o,ä., kann ich das leider nicht testen.

                      Gruß

                      Klaus

                    • #1835
                      Tim K
                      Teilnehmer

                        Hi Klaus,

                        vielen Dank für die Unterstützung. Ich gebs jetzt auf mit put. Auch im englischen Forum gibt es zwar einen Hinweis auf das gleiche Problem, aber leider keinerlei Hinweis auf eine Lösung.

                        Ich habe gerade festgestellt, dass ich die Variable von LiveCode an ein PHP Skript senden kann und lasse dann das Skript den Wert in die Datei schreiben. Das funktioniert nach meinem ersten Test auch vom Telefon aus.

                        Schönes Wochenende
                        Tim

                      • #2030
                        Tim K
                        Teilnehmer

                          Hi,

                          ich habe jetzt damit angefangen, Daten in lokale Dateien auf dem Gerät zu schreiben. Das funktioniert auch sehr gut.

                          Eine Frage kam mir dabei allerdings: Wo sind diese Dateien?
                          Wenn ich mit dem Total Commander danach suche, findet er sie nicht… Über die App “Eigene Dateien” werden sie auch nicht gefunden.

                          Danke und schönen Gruß
                          Tim

                        • #2057
                          Klaus Major
                          Administrator

                            Hi Tim,

                            das hier habe ich vom englischen LC Forum auf eine Frage, wo denn das exportierte Image geblieben ist, offenbar werden Daten in einem “virtuellen” Dokumenten Ordner gespeichert, auf den man nicht so ohne Weiteres zugreifen kann.

                            Android is sandboxed and the data might go into the private documents area of the app. It will not be saved to the public shared documents folder so if you are using a file manager to look for it, it won’t be there. You can’t see the app’s document folder without rooting the device.

                            Gruß

                            Klaus

                          • #2060
                            Tim K
                            Teilnehmer

                              Hi Klaus,

                              Danke für die Info.

                              Klingt natürlich heikel “public shared”… Telefone und Tablets sind ja üblicherweise für mehrere Benutzer konzipiert. Es dient wahrscheinlich wieder mal nur meinem Schutz, dass man mich auf meine eigenen Dateien nicht zugreifen lässt, sicher ist sicher. Fast schon absurd, dass man mich keine Dokumente in den Bereich “Eigene Dateien > Dokumente” speichern lässt. Nach klassischer Smart-Logik müsste es eigentlich “Meine Dateien” heißen, könnte also sein, dass die eigenen Dateien gar nicht mir gehören 😉

                              Schönen Abend
                              Tim

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