Startseite › Foren › Deutsches LiveCode-Forum › Pfade unter Android — Knoten im Gehirn ….
Schlagwörter: Pfade Android
- Dieses Thema hat 17 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 4 Jahren von Klaus Major.
-
AutorBeiträge
-
-
August 13, 2020 um 13:03 Uhr #22111
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:
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.
-
August 13, 2020 um 13:20 Uhr #22114
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
-
August 13, 2020 um 13:51 Uhr #22116
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
-
August 13, 2020 um 16:35 Uhr #22121
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.
-
August 13, 2020 um 16:44 Uhr #22122
Bei Fragen unbedingt fragen!
Ich hab noch eine Menge Antworten! 🙂 -
August 13, 2020 um 20:24 Uhr #22131
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?
-
August 13, 2020 um 20:37 Uhr #22132
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.
-
August 13, 2020 um 21:23 Uhr #22136
OK das klingt logisch. Danke werde ich gleich mal testen, oder doch erst morgen. Sitze schon zu lange davor.
-
August 14, 2020 um 08:12 Uhr #22149
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
-
August 14, 2020 um 09:58 Uhr #22150
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
-
August 14, 2020 um 10:09 Uhr #22152
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.
-
August 14, 2020 um 10:18 Uhr #22153
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 ...
-
August 14, 2020 um 13:12 Uhr #22155
Dankeschön, so hat das jetzt geklappt aber erst nach dem ich die Pfade manuell erstellt habe.
-
August 14, 2020 um 13:23 Uhr #22156
Was meinst Du mit: … aber erst nach dem ich die Pfade manuell erstellt habe?
-
August 14, 2020 um 13:26 Uhr #22158
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.
-
August 14, 2020 um 13:33 Uhr #22159
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?
-
August 14, 2020 um 13:49 Uhr #22161
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. -
August 14, 2020 um 13:59 Uhr #22162
Leider sind Datagrids die komplexesten Objekte in LC, was Skripting angeht!
Die sehen allerdings sofort gut aus! 😀
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.