Liste speichern

Startseite Foren Deutsches LiveCode-Forum Liste speichern

Ansicht von 10 Antwort-Themen
  • Autor
    Beiträge
    • #30053
      Ixitixl
      Teilnehmer

        Hallo,

        wenn man einmal anfängt mit dem Programmieren….
        …zugegeben, ich habe schon wieder das Buch verlassen, weil ich etwas auf dem Handy haben will. Nämlich eine Notizliste. Ich hab jetzt ziemlich lange nach Codes gesucht und mir dann Folgendes zusammen gebaut:

        on shutdown
           --Speicherordner festlegen
           set the defaultFolder to specialFolderPath("Documents")
           --Label speichern
           put the styledtext of me into URL ("file:AndroNotizen.txt")
           pass shutdown
        end shutdown
        
        on openStack
           --Speicherort festlegen
           set the defaultFolder to specialFolderPath("Documents")
           --Label laden
           put URL ("file:AndroNotizen.txt") into the styledtext of me
        end openStack

        Zur Anwendung komme ich gar nicht, weil bereits im Code in der letzten Zeile vom openStack-Teil etwas falsch ist („can’t create a variable with that name“). Ja, wie, variable erstellen? Ich dachte, das versuche ich doch gar nicht….

        …und ist der Rest schlüssig? Ich habe den Code in das Feld „fldNotizen“ geschrieben. Geht das, oder muss ich ihn auseinander ziehen und den defaultFolder in den Gesamtstack schreiben?

        Ich hab das Gefühl, die Fragen werden eher mehr als weniger. Sorry. 🙂

        Grüße!
        Ixitixl

      • #30055
        Klaus Major
        Administrator

          Hi Ixitixl,

          mehrere Sachen…

          1. the styledtext of fld xyz
          Liefert ein ARRAY zurück, was Du nicht einfach als Text speichern kannst,
          es muss BINÄR sein! Ansonsten sind die Daten in der Datei korrupt!
          Also:

          ## Es gibt keinen Grund mit dem DEFAULTFOLDER rumzumachen, 
          ## wenn wir doch komplette Pfadnamen zusammensetzen können. :-)
          put the styledtext of FIELD XYZ into URL ("BINfile:" & specialdfolderpath("documents") & "/AndroNotizen.txt")

          2. Da das offensichtlich im Stackscript steht, bezieht sich OF ME natürlich auf den Stack,
          der aber diese Property NICHT besitzt! Siehe oben, Du musst das Feld mit angeben.

          („can’t create a variable with that name“). Ja, wie, variable erstellen? Ich dachte, das versuche ich doch gar nicht….

          Doch, hast Du! 😀
          3. „styledtext“ ist eine PROPERTY und keine Variable in die wir etwas PUTten können,
          daher die Fehlermeldung in LC.
          -> put 100 into the height of me
          Ist natürlich Blödsin, wie Du zugeben musst, daher:

          ...
          put specialfolderpath("documents") & "/AndroNotizen.txt" into tFile
          ## Immer wichtig, erst gucken, ob auch alles da ist, wo wir es vermuten!
          if there is a file tFile then
            set the styledtext of FIELD XYZ to url("binfile:" & tFile)
          end if
          ...

          Gruß

          Klaus

        • #30057
          Ixitixl
          Teilnehmer

            Wow, danke für die schnelle und ausführliche Antwort. Da probiere ich doch gleich Mal weiter.
            Und korrupt möchte ich nichts und niemanden haben, volle Zustimmung. 😉

          • #30060
            Ixitixl
            Teilnehmer

              Es funktioniert!

              Hat jetzt auch über eine Stunde gedauert, weil ich zwei Rechtschreibfehler drin hatte – und mich dann wunderte, dass nichts gespeichert wurde. ^^

            • #30061
              Klaus Major
              Administrator

                Es funktioniert!

                Das wundert mich irgendwie kein Bißchen! 😎

              • #30069
                Ixitixl
                Teilnehmer

                  Eine Sache fehlt noch:

                  Ich habe das jetzt von meiner Testapp auf die Hauptapp übertragen. Diese besteht aus mehreren Karten.

                  Ich vermute Mal, dass, ich im Skript:

                  ----Notizfeld
                  --Text speichern
                  on shutdown
                   put the text of FIELD "fldNotizen" into URL ("BINfile:" & specialfolderpath("Documents") & "/AndroNotizen.txt")
                   pass shutdown
                  end shutdown
                  
                  on openStack
                    --Text laden
                    put specialfolderpath("Documents") & "/AndroNotizen.txt" into tFile
                    if there is a file tFile then
                       set the text of FIELD "fldNotizen" to url("binfile:" & tFile)
                    end if
                  end openStack

                  jeweils noch den aktuellen Kartennamen einfügen muss.
                  Meine Ergänzung wie
                  put the text of FIELD "fldNotizen" of card "crdHauptseite" into URL ("BINfile:" & specialfolderpath("Documents") & "/AndroNotizen.txt")
                  (analog beim öffnen) und ähnliches (on, in) sind leider gescheitert. Das Programm meckert leider nicht. Kann mir hier noch jemand helfen?

                  Dann wäre ich auch erst Mal still. 😉

                • #30070
                  Klaus Major
                  Administrator

                    „the text of fld xyz“ ist NICHT binär, sondern einfacher Text.
                    Daher ist hier nur FILE nötig, aber nicht BINFILE!

                    iOs und Android sind „case-sensitive“ Betriebsysteme, daher sollte es so klappen:

                    ...
                    put the text of fld "fldNotizen" of card "crdHauptseite" into URL ("file:" & specialfolderpath("documents") & "/AndroNotizen.txt")
                    ## -> documents, kleines d
                    ...

                    Daher würde ich ALLES, also Dateinamen etc., KLEIN schreiben -> andronotizen.txt
                    So muss man sich nicht merken, ob ein Buchstabe groß geschreiben wurde oder nicht.

                    P.S.
                    Ich habe einige Sachen wie FIELD/BINfile nur zur Verdeutlichung groß geschrieben!

                  • #30072
                    Ixitixl
                    Teilnehmer

                      Danke für die vielen Tipps.

                      Leider funktioniert es immer noch nicht. Das ist jetzt mein Skript:

                      ----Notizfeld
                      --Text speichern
                      on shutdown
                         put the text of fld "fldNotizen" of card "crdHauptseite" into url ("file:" & specialfolderpath("documents") & "/AndroNotizen.txt")
                         pass shutdown
                      end shutdown
                      
                      on openStack
                         --Text laden
                         put specialfolderpath("documents") & "/AndroNotizen.txt" into tFile
                         if there is a file tFile then
                            set the text of fld "fldNotizen" of card "crdHauptseite" to url ("file:" & tFile)
                         end if
                      end openStack

                      Wenn da jetzt alles in Ordnung ist, dann muss ich schrittweise Mal die anderen Elemente aus der Datei schmeissen, bis ich das Hemmnis gefunden habe. Es befindet sich z. B. ein Switch drin, dass das fldNotizen versteckt (auch wenn ich jetzt alles auf sichtbar geschaltet habe) usw.. Ich hoffe, dass es nur eine Kleinigkeit im Code ist, den ich grade nicht sehe…

                      Aber danke für die Hilfe! Ich schaue morgen wieder drüber, vielleicht bin ich grad ja nur blind.

                      Lieben Gruß
                      Ixitixl

                    • #30073
                      Klaus Major
                      Administrator

                        Vielleicht ist shutdown nicht der richtige Zeitpunkt.
                        Bin mir auch nicht sicher, ob unter Android die App auch wirklich beendet wird.
                        Probiere mal closestack:

                        on closestack
                           put the text of fld "fldNotizen" of card "crdHauptseite" into url ("file:" & specialfolderpath("documents") & "/AndroNotizen.txt")
                        end closestack
                      • #30092
                        Ixitixl
                        Teilnehmer

                          Problem gelöst.

                          Ich hatte im Skript vom Stack zweimal

                          onOpenStack

                          drin stehen und dachte, der arbeitet die nacheinander einfach ab. Es wird aber wohl nur das erste Mal berücksichtigt. Zusammenführung löste es dann.


                          @Klaus
                          : Vielen Dank für Deine Hilfe!

                        • #30093
                          Klaus Major
                          Administrator

                            Ja, wenn Du zwei Handler mit dem gleichen Namen hast, nimmt LC immer den ersten, den es im Skript findet.

                            Dito bei zwei Objekten (button, Field etc.) gleichen Namens, dann nimmt LC das Objekt mit der niedrigsten Layer-Nummer

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