Italian Job.Postmultipart (in questo caso) a volte non capisco se ci è o ci fa

antonio.murtino

Member
Licensed User
Longtime User
Veramente a volte rinuncio a capire, specie quando sai che non stai commettendo errori, riduci, esemplifichi, ma come per magia la app collassa senza segnalare alcuna eccezione (quindi try catch non serve a nulla), è il caso di questo semplice codice, precedentemente rinchiuso in un bottone, con dati costanti; per eseguire il test e non complicare il codice stesso, eccolo:

B4X:
Sub pushJob
     Dim job1 As HttpJob, Jobname As String
    
     job1.Initialize(Jobname,Me)
    
     Dim m As Map
     m.Initialize
     m.Put("imei","8XXX30021953XXX")
     m.Put("latitude","40.799973")
     m.Put("longitude","8.572351")
     m.Put("course","12")
     m.Put("speed","80")
       
     job1.PostMultipart("http://78.127.222.115/services/launcher_2-0/device?action=set_position",m,Null)
    
     'Msgbox(job1.Success,"Result")
End Sub

..... insomma senza un errore ne manifestato ne apparente l'applicazione si chiude, in pratica esegue una "ExitApplication", l'altra cosa meravigliosa è che le informazioni inviate al server arrivano regolarmente, ovviamente in modalità One-Shot, visto che la app si chiude.

Avete qualche vaga idea di ciò, anche altre volte mi è capitata una cosa del genere, ma modificando leggermente qualcosa, di volta in volta diversa, il problema si è risolto, ma la cosa deve funzionare cosi?
 

Star-Dust

Expert
Licensed User
Longtime User
Try this
B4X:
Dim job1 As HttpJob, Jobname AsString

Jobname="Job1"
job1.Initialize(Jobname,Me)
.....
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Avete qualche vaga idea di ciò,
Personalmente nemmeno vaga :D ed infatti... provo a darti ugualmente qualche suggerimento (cose che tenterei io):

1) tentare l'esecuzione in modalità debug e vedere se ti indica la riga esatta in cui avviene l'errore;
2) togliere la spunta dal Filter nel Log, in modo da leggere tutti gli errori di sistema;
3) (beh questo avrebbe dovuto essere il punto 1) assicurarsi che l'errore avvenga proprio a causa dell'http job:
4) testare / imitare quest'esempio (e vedere se stai usando le stesse librerie).
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Try this
B4X:
Dim job1 AsHttpJob, Jobname AsString

Jobname="Job1"
job1.Initialize(Jobname,Me)
.....
Non credo; ho appena "tracciato il percorso" del JobName in un esempio di Erel e non dovrebbe dare problemi.
[Ho notato una cosa strana, però: è dichiarato come variabile pubblica nella classe Httpjob, quando sarebbe stato più corretto passarlo come parametro all'evento JobDone]
 

sirjo66

Well-Known Member
Licensed User
Longtime User
anch'io avevo provato tempo fa il MultiPart ma poi non l'ho più usato perchè non funzionava a dovere, soprattutto se devi inviare un file

Visto che i dati da inviare non sono molti, potresti usare un semplice GET

B4X:
Sub pushJob
Dim job1 As HttpJob, Jobname As String = "Jobb"

job1.Initialize(Jobname,Me)

job1.Download("http://78.127.222.115/services/launcher_2-0/device?action=set_position&imei=8XXX30021953XXX&latitude=40.799973&longitude=8.572351&course=12&speed=80")

in ogni caso la riga
Dim job1 As HttpJob
va messa sulla Sub Globals, non dentro la routine
 
Last edited:

antonio.murtino

Member
Licensed User
Longtime User
Non credo; ho appena "tracciato il percorso" del JobName in un esempio di Erel e non dovrebbe dare problemi.
[Ho notato una cosa strana, però: è dichiarato come variabile pubblica nella classe Httpjob, quando sarebbe stato più corretto passarlo come parametro all'evento JobDone]
Si hai ragione, ma in realtà il passaggio in origine era:
B4X:
Dim Job1 as HttpJob
Job1.Initialize("job1",me)

ecc. ecc.

l'errore avviene in egual modo.
 

antonio.murtino

Member
Licensed User
Longtime User
Personalmente nemmeno vaga :D ed infatti... provo a darti ugualmente qualche suggerimento (cose che tenterei io):

1) tentare l'esecuzione in modalità debug e vedere se ti indica la riga esatta in cui avviene l'errore;
2) togliere la spunta dal Filter nel Log, in modo da leggere tutti gli errori di sistema;
3) (beh questo avrebbe dovuto essere il punto 1) assicurarsi che l'errore avvenga proprio a causa dell'http job:
4) testare / imitare quest'esempio (e vedere se stai usando le stesse librerie).

1) già fatto in precedenza, nessun errore
2) non l'ho fatto e lo provo subito

ora ho aggiornato un po di roba e riprovo, ma quello che non capisco è che comunque il server riceve le info correttamente
... l'errore è proprio a causa dell'http job, infatti quando levo:
B4X:
 job1.PostMultipart("http://78.127.222.115/services/launcher_2-0/device?action=set_position",m,Null)
non mi da alcun errore.

Oggi sono fisso qui invece che starmene al mare, ma chi la dura la vince.
 

antonio.murtino

Member
Licensed User
Longtime User
anch'io avevo provato tempo fa il MultiPart ma poi non l'ho più usato perchè non funzionava a dovere, soprattutto se devi inviare un file

Visto che i dati da inviare non sono molti, potresti usare un semplice GET

B4X:
Sub pushJob
Dim job1 As HttpJob, Jobname As String = "Jobb"

job1.Initialize(Jobname,Me)

job1.Download("http://78.127.222.115/services/launcher_2-0/device?action=set_position&imei=8XXX30021953XXX&latitude=40.799973&longitude=8.572351&course=12&speed=80")

in ogni caso la riga
Dim job1 As HttpJob
va messa sulla Sub Globals, non dentro la routine
...non funziona, perchè dall'altra parte vi è un server con del codice php e recupera tutto tramite POST.


Per quanto riguarda il dimensionamento di job1, puoi dichiararlo sia sulla Sub Global che all'interno della routine
in quest'ultimo caso la usi solo nella routine.
 

sirjo66

Well-Known Member
Licensed User
Longtime User
in questo modo a me funziona perfettamente:

B4X:
Sub pushJob
    Dim job1 As HttpJob, Jobname As String = "Jobb"
 
    job1.Initialize(Jobname,Me)
    job1.PostString("http://78.127.222.115/services/launcher_2-0/device?action=set_position", _
        "imei=8XXX30021953XXX&latitude=40.799973&longitude=8.572351&course=12&" & _
        "speed=80")
End Sub
 

LordZenzo

Well-Known Member
Licensed User
Longtime User
Forse arrivo tardi , ma io l'errore lo vedo qui
Sub pushJob
Dim job1 As HttpJob, Jobname As String

job1.Initialize(Jobname,Me
Tu dichiari una variabile jobname come stringa e poi non vi inserisci nulla, questo non è come scrivere "" , e allora cosa succede? Semplice, la libreria prende i dati da inviare, li invia, e quando riceve la risposta prova a restituire la risposta al programma chiamante usando quella stringa che non è vuota ma nulla e quindi va in errore, dopo aver inviato i dati
Potrei sbagliarmi naturalmente
Prova ad aggiungere jobname as stringa="nomejob"
O anche =""
 
Last edited:

antonio.murtino

Member
Licensed User
Longtime User
Risolto l'arcano, praticamente il codice scritto è corretto, ovvero la parte:
B4X:
Sub pushJob
     Dim job1 As HttpJob
   
     job1.Initialize("job1",Me)
   
     Dim m As Map
     m.Initialize
     m.Put("imei","8XXX30021953XXX")
     m.Put("latitude","40.799973")
     m.Put("longitude","8.572351")
     m.Put("course","12")
     m.Put("speed","80")
      
     job1.PostMultipart("http://78.127.222.115/services/launcher_2-0/device?action=set_position",m,Null)
   
     'Msgbox(job1.Success,"Result")
End Sub

quindi scritto com'è deve funzionare, sarebbe bello, data la struttura semplice, ma di fatto non funzionerà mai; perchè a quanto pare vi è un problema nativo mai risolto.

Ho fatto qualche giro e ho tratto questa conclusione, poi ho seguito alcune delucidazioni di Erel; nelle quali esponeva un metodo alternativo, abbastanza macchinoso, però molto molto efficiente e veloce. Infatti ho ricostruito la routine con il nuovo metodo, semplicemente applicando la vecchia libreria HTTP, che tral'altro il metodo "PostMultipart", non esiste neppure.


Grazie a tutti della collaborazione.
 

sirjo66

Well-Known Member
Licensed User
Longtime User
infatti se guardi il mio post #9 ti avevo riscritto il tutto non utilizzando PostMultipart ma PostString
 

antonio.murtino

Member
Licensed User
Longtime User
infatti se guardi il mio post #9 ti avevo riscritto il tutto non utilizzando PostMultipart ma PostString
No sirjo66, utilizzando PostString il problema resta, infatti come ho detto, gran parte dei metodi derivanti dalla libreria OKHTTPUtils2 non funzionano correttamente.

Infatti come ho detto ho risolto utilizzando la vecchia libreria HTTP, naturalmente impostando un metodo alternativo per la gestione del PostMultipart, con dei risultati più che soddisfacenti, in prarica utilizzando i vecchi metodi di HttpRequest e Execute e funziona veramente bene.
 

MarcoRome

Expert
Licensed User
Longtime User
Risolto l'arcano, praticamente il codice scritto è corretto, ovvero la parte:
B4X:
Sub pushJob
     Dim job1 As HttpJob
  
     job1.Initialize("job1",Me)
  
     Dim m As Map
     m.Initialize
     m.Put("imei","8XXX30021953XXX")
     m.Put("latitude","40.799973")
     m.Put("longitude","8.572351")
     m.Put("course","12")
     m.Put("speed","80")
     
     job1.PostMultipart("http://78.127.222.115/services/launcher_2-0/device?action=set_position",m,Null)
  
     'Msgbox(job1.Success,"Result")
End Sub

quindi scritto com'è deve funzionare, sarebbe bello, data la struttura semplice, ma di fatto non funzionerà mai; perchè a quanto pare vi è un problema nativo mai risolto.

Ho fatto qualche giro e ho tratto questa conclusione, poi ho seguito alcune delucidazioni di Erel; nelle quali esponeva un metodo alternativo, abbastanza macchinoso, però molto molto efficiente e veloce. Infatti ho ricostruito la routine con il nuovo metodo, semplicemente applicando la vecchia libreria HTTP, che tral'altro il metodo "PostMultipart", non esiste neppure.


Grazie a tutti della collaborazione.

Il metodo non esiste nella libreria ma nella classe ( QUI )
 
Top