Ho una situazione (penso) classica: Voglio proseguire un codice solo se una delle routine chiamate sia effettivamente terminata
Nello specifico, scarico una pagina HTML da un sito e la memorizzo in una string 'CodiceHTML'
Solo dopo che tale string sia effettivamente valorizzata devo proseguire col programma.
Immagino ci voglia un 'Wait for' ma questo comando non riesco proprio a capirlo (facendo esaurire alcuni di voi in un altro post...qui).
Al momento ho risolto ritardando l'esecuzione delle istruzioni che seguono quella che mi restituisce 'CodiceHTML', con uno Sleep.
Però vorrei imparare perchè penso che questo mio ripiego sia uno po un accrocchio, funzionante, ma pur sempre un accrocchio.
Ecco il codice interessato
Nello specifico, scarico una pagina HTML da un sito e la memorizzo in una string 'CodiceHTML'
Solo dopo che tale string sia effettivamente valorizzata devo proseguire col programma.
Immagino ci voglia un 'Wait for' ma questo comando non riesco proprio a capirlo (facendo esaurire alcuni di voi in un altro post...qui).
Al momento ho risolto ritardando l'esecuzione delle istruzioni che seguono quella che mi restituisce 'CodiceHTML', con uno Sleep.
Però vorrei imparare perchè penso che questo mio ripiego sia uno po un accrocchio, funzionante, ma pur sempre un accrocchio.
Ecco il codice interessato
B4X:
Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
Activity.LoadLayout("Layout")
Avvio
End Sub
Sub Avvio
EstraePaginaHTML
'Wait for JobDone (Job As HttpJob) 'così non funziona'
Sleep(2000) ' così funziona e mi ritrovo CodiceHTML non vuoto
If CodiceHTML<>"" Then
RipuliscoHTML
Else
Msgbox("Non sono riuscito a ricavare CodiceHTML!","")
Return
End If
'continuo con alktre routine se sopra è andato tutto ok'
End Sub
Sub EstraePaginaHTML
oHttpClient.Initialize("oHttpClient") ' client http
Dim oHTTPJob As HttpJob
oHTTPJob.Initialize("oHTTPJob", Me)
oHTTPJob.Download("https://www.estrazionedellotto.it/")
End Sub
Sub JobDone (Job As HttpJob)
Log("Evento JobName = " & Job.JobName & ", Success = " & Job.Success)
If Job.Success And Job.JobName= "oHTTPJob" Then
CodiceHTML =Job.getstring
Else
Log("Error: " & Job.ErrorMessage)
ToastMessageShow("Error: " & Job.ErrorMessage, True)
End If
Job.Release
End Sub