In my Activity_Create code I submit 2 HttpJob requests, but I only see 1 job request complete. The request which completes is random. Based upon logs that I create on the server, both requests are returning json data. Can I only have 1 request outstanding at once? I'm targeting 4.4.2 and I'm testing this on an emulator running 4.4.2.
B4X:
Dim GetVol As HttpJob
GetVol.Initialize("VolunteerList", Me)
GetVol.Download2(url, Array As String("barcode", "VL", "state", 0, "json", ""))
Dim GetItems As HttpJob
GetItems.Initialize("ItemList", Me)
GetItems.Download2(url, Array As String("barcode", "IL", "state", 0, "json", ""))
Here's part of the HttpJob code:
B4X:
Sub JobDone(Job As HttpJob)
ProgressDialogHide
If Job.Success Then
Dim res As String
res = Job.GetString
Log("Back from Job:" & Job.JobName )
Log("Response from server: *" & res & "*")
Here's what I see on the IDE logs:
B4X:
** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
** Service (httputils2service) Create **
** Service (httputils2service) Start **
** Service (httputils2service) Start **
Back from Job:VolunteerList
Response from server: [json data]
please upload your project (export as zip) and we´ll help finding the problem.
Your code seems to work only if the job success = true... But what if success is not true?
Try this jobdone sub to find out more and/or have a look at the example. It uses two jobs at once
B4X:
Sub JobDone(job As HttpJob)
If job.Success Then
Dim res As String
res = Job.GetString
Log("Back from Job:" & Job.JobName )
Log("Response from server: *" & res & "*")
Else
Log("Back from Job:" & Job.JobName )
Log("Error: " & job.ErrorMessage)
ToastMessageShow("Error: " & job.ErrorMessage, True)
End If
job.Release
End Sub
I believe that the best route is to call the second job after the success of the previous one.
something like
B4X:
Dim GetVol As HttpJob
GetVol.Initialize("VolunteerList", Me)
GetVol.Download2(url, Array As String("barcode", "VL", "state", 0, "json", ""))
and then
B4X:
Sub JobDone(Job As HttpJob)
ProgressDialogHide
If Job.Success Then
' do what you want and
'Launch next job
Dim GetItems As HttpJob
GetItems.Initialize("ItemList", Me)
GetItems.Download2(url, ArrayAsString("barcode", "IL", "state", 0, "json", ""))
of course that you need to analyse and parse whatever you want to do acording to what you want to achieve and organize the code in the correct way. This is just to ilustrate the idea.
As DonManfred has written, it depends if they have to be called in sequence or not (f.e. if you check one thing with the first job and the 2nd job needs this information).
A nice thing is to tag the jobs:
B4X:
Dim GetImage As HttpJob
GetImage.Initialize("GetImage", Me)
GetImage.Tag=filen 'filename
GetImage.Download("http://www.xxxx.com/" & filen)
Here you can put any value and you can check if all jobs are back (if needed).
In one App I use it because I load all files from a folder (images). Every image has a corresponding text file. So I put the filename (which I retrieved as a list before) in it.
When a job comes back I always know which file I got and which format it has (.jpg or .txt).