![]() |
IdHTTP in Android Release Modus
Hallo,
ich arbeite an einer Android (später auch IOS) App, die Dateien für den Offline-Modus bereitstellt. Diese werden von einer Webseite geladen mit IdHTTP. Das funktioniert auch alles unter Windows bzw auf Android im Debug-Modus. Sobald ich den Release Modus verwende, stürzt die Android-App beim ersten Online-Zugriff (IdHttp.Post/Get) ab. Berechtigungen sind identisch, der Abruf von zugehörigen Metadaten per RestClient funktioniert in der Release-Version. D.h. Zugriff auf Internet ist vorhanden. Test Gerät läuft auf Android 11. Habe leider keine anderen Beiträge finden können, die mich einer Lösung näher gebracht haben. LG mtle |
AW: IdHTTP in Android Release Modus
Geht es um https? Dann ist die Frage: Sind de SSL-Libraries im Release-Modus deployed? Diese muss man in beiden Konfigurationen in den Projekt-Deployment-Settings aufführen.
|
AW: IdHTTP in Android Release Modus
:wall:
Danke, manchmal übersieht man die einfachsten Dinge. Hab nicht dran gedacht, daß die Bereitstellung auch "doppelt" konfiguriert werden muß. |
AW: IdHTTP in Android Release Modus
Ich habe gerade dasselbe Problem (Android App stürzt ab beim GET einer htpps Datei) jedoch arbeite ich nicht mit idHTTP sondern mit THTTPClient.
Damit sollten keine SSL Libs nötig sein. Unter Windows klappt das einwandfrei, unter Android jedoch nicht. Hier der Code:
Code:
procedure TFMain.FormCreate(Sender: TObject);
var mstream: TMemoryStream; function DownloadFile(const aURL: string; aStream: TStream): boolean; // THTTPClient benötigt im Gegensatz zu TidHTTP beim Download von htpps:// KEINE SSL Dateien! var vHTTP: THTTPClient; begin Assert(aStream <> nil); vHTTP := THTTPClient.Create; vHTTP.CustomHeaders['Pragma'] := 'no-cache'; try Result := vHTTP.Get(aURL, aStream).StatusCode = 200; finally vHTTP.Free end end; begin mstream := TMemoryStream.Create; try DownloadFile('https://www.[]', mstream); Memo1.Lines.LoadFromStream(mstream); mstream.Free; except // [kein Internet, lokal gespeicherten Dateiinhalt/Backup verarbeiten] end; end |
AW: IdHTTP in Android Release Modus
Delphi-Quellcode:
Wie ist es denn so?
procedure TFMain.FormCreate(Sender: TObject);
var mstream: TMemoryStream; function DownloadFile(const aURL: string; aStream: TStream): boolean; // THTTPClient benötigt im Gegensatz zu TidHTTP beim Download von htpps:// KEINE SSL Dateien! var vHTTP: THTTPClient; vResponse: IHTTPResponse; begin Result := False; Assert(aStream <> nil); vHTTP := THTTPClient.Create; try vHTTP.CustomHeaders['Pragma'] := 'no-cache'; vResponse := vHTTP.Get(aURL, aStream); if Assigned(vResponse) then begin Result := vResponse.StatusCode = 200; end else begin // kluge Log-Möglichkeit, damit man mitbekommt, das keine Instanz von IHTTPResponse zurückkommt end; finally vHTTP.Free end; end; begin mstream := TMemoryStream.Create; try try DownloadFile('https://www.[]', mstream); Memo1.Lines.LoadFromStream(mstream); except // [kein Internet, lokal gespeicherten Dateiinhalt/Backup verarbeiten] end; finally mstream.Free; end; end; |
AW: IdHTTP in Android Release Modus
Ich sehe da zwei Probleme.
1. Der Request ist blocking ![]() Deshalb sollte man das besser asynchron in einem Thread aufrufen. 2. In FormCreate sollte man unter Mobile nichts machen. Besser auf FormShow warten, und da dann irgendwelche längerdauernden Tasks machen. Wird Android blockiert, insbesondere beim Startup, ist das meistens eine Garantie dass dich das OS killt. |
AW: IdHTTP in Android Release Modus
Die erweiterte DownloadFile Function von TiGü und das Verschieben in OnShow hat leider nichts gebracht.
Mit Threads komme ich alleine nicht klar. Kann mir da bitte jemand mit einem Stück Code helfen? |
AW: IdHTTP in Android Release Modus
Zitat:
Ich hole mir da meine Ini rein, initialisiere TTS, holen mit die Versionen etc. Sollte ich das wirklich alles erst im Formshow machen? |
AW: IdHTTP in Android Release Modus
Ja, denn das System ist mit hochfahren beschäftigt.
Dauert da etwas zu lange wird man rausgeworfen. Phones akzeptieren keine Geisterzustände. Wenn der ViewController dann sichtbar ist, dann ist die App im Foreground, da kann der User machen was er will. Aber längere Zeit blockieren geht auch da in die Hose, z.b. wenn ein Anruft kommt, dann fliegt die App wieder raus. Du hast natürlich etwas Zeit, wenn es nicht lange blockiert Ok, Aber eine hhtp Abfrage fällt da nicht drunter. |
AW: IdHTTP in Android Release Modus
Der Fehler wurde an einer anderen Stelle verursacht. Ein thread ist für das GET nicht unbedingt erforderlich
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz