German Suche 'best practice': Auf HttpClient-Response warten

Kiffi

Well-Known Member
Licensed User
Longtime User
Hallo,

beim ersten Start meiner Applikation muss sich der Benutzer mit Usernamen
und Passwort anmelden. Diese Daten werden dann via HttpRequest an meinen
Webserver gesendet, welcher dann überprüft, ob die Anmeldung korrekt ist.

also im Prinzip sowas wie das hier:
B4X:
ProgressDialogShow("Einen kleinen Augenblick...")
Dim req As HttpRequest
req.InitializePost2("http://trallalla/php.php", Benutzerdaten)
req.Timeout = 60000
HttpClient1.Execute(req, 1)

Meine Frage: Nun muss ich solange warten, bis der Response zurückgesendet
wird. Nur: Wie macht man sowas an besten? Mit einer Do-Loop-Schleife mit
innenliegendem DoEvents?

B4X:
Do Until Response = True
 DoEvents
Loop

Sub HttpClient1_ResponseSuccess(...
 ' [...]
 Response = True
End Sub

Sub HttpClient1_ResponseError(... 
 ' [...]
 Response = True
End Sub

Ich meine ein Posting von Erel gelesen zu haben, dass sowas unsauber sei...

Danke im voraus & Grüße ... Kiffi
 

corwin42

Expert
Licensed User
Longtime User
Warum willst Du irgendwo warten?

Nach HttpClient1.Execute(req, 1)
sollte Deine Sub zu Ende sein.

Dann geht es entweder bei Sub HttpClient1_ResponseError oder HttpClient1_ResponseSuccess weiter.

Wo willst Du da loopen?
 

Kiffi

Well-Known Member
Licensed User
Longtime User
Warum willst Du irgendwo warten?

Der Prozess läuft (vereinfacht) so ab:

1.) Benutzer gibt Login-Daten ein

2.) Login-Daten werden an den Server geschickt (Request)

3.) Server schickt ein OK zurück (Response)

4.) Benutzer wird begrüßt

Nun läuft der Code ab Schritt 2 asynchron ab:
Die Antwort vom Server kommt nicht immer sofort.
Je nach Verbindung kann sie schon mal auf sich warten lassen

Deswegen muss ich vor Schritt 4 warten, bis die Antwort auch wirklich da ist.

Grüße ... Kiffi
 

corwin42

Expert
Licensed User
Longtime User
1.) Benutzer gibt Login-Daten ein

2.) Login-Daten werden an den Server geschickt (Request)

3.) Server schickt ein OK zurück (Response)

4.) Benutzer wird begrüßt

Der Trick ist doch, nicht alles in eine Sub zu packen.

Wie gesagt, nach HttpClient1.Execute(req, 1) ist Deine Sub zu ende.
Und in HttpClient1_ResponseSuccess ruftst Du die Benutzerbegrüßung auf.
Da wird dann keine Loop benötigt.
 
Top