Bonjour
J'ai codé ce service pour télécharger des images.
J'ai bien compris que HttpClient ne supporte que 5 Dl simultanés, donc j'initie le 1er Dl au start du service, les autres Dl sont lancés au Succes du précédent.
Le souci c'est que je suis obligé de ralentir le téléchargement avec une boucle bidon For/Next sinon HttpClient stoppe aléatoirement après 8 ou 10 téléchargements sans message d'erreur.
Avec ce contournement, que je ne m'explique pas, le service fonctionne parfaitement
Je me prends la tête avec ça depuis 48 heures mais je ne comprends pas ou peu se situer le problème.
Un idée ?
Merci
J'ai codé ce service pour télécharger des images.
B4X:
'Service module
Sub Process_Globals
Dim HttpGetTile As HttpClient
Dim JobDlTile As Int
Dim Request As HttpRequest
End Sub
Sub Service_Create
Main.DLTile_STATUS=1
HttpGetTile.Initialize("HttpGetTile")
End Sub
Sub Service_Start (StartingIntent As Intent)
Dim aElement As TlstDlTile
'Téléchargement de la premiere tile
'Les autres téléchargements sont initiés depuis ResponseSucces
JobDlTile=0
aElement.Initialize
aElement=Main.LstDlTile.Get(JobDlTile)
Request.InitializeGet(aElement.U)
Request.SetHeader("User-Agent","Mozilla/5.0 (Android; Linux armv7l; rv:5.0) Gecko/20110615 Firefox/5.0 Fennec/5.0")
Request.Timeout=1000
HttpGetTile.Execute(Request,JobDlTile)
End Sub
Sub Service_Destroy
End Sub
Sub HttpGetTile_ResponseSuccess (Response As HttpResponse, TaskId As Int)
Dim aInputStream As InputStream
Dim aCanvas As Canvas
Dim aBitmap As Bitmap
Dim aRect As Rect
Dim aOutputStream As OutputStream
Dim aBmpTile As Bitmap
aInputStream=response.GetInputStream
aBmpTile.Initialize2(aInputStream)
Dim aElement As TlstDlTile
aElement.Initialize
aElement=Main.LstDlTile.Get(JobDlTile)
aOutputStream = File.OpenOutput(File.DirRootExternal,aElement.P, False)
aBmpTile.WriteToStream(aOutputStream, 100, "JPEG")
aOutputStream.Close
[b]Response.Release[/b]
If JobDlTile<Main.LstDlTile.Size-1 Then
JobDlTile=JobDlTile+1
Dim aElement As TlstDlTile
aElement.initialize
aElement=Main.LstDlTile.Get(JobDlTile)
Request.InitializeGet(aElement.U)
Request.SetHeader("User-Agent","Mozilla/5.0 (Android; Linux armv7l; rv:5.0) Gecko/20110615 Firefox/5.0 Fennec/5.0")
Request.Timeout=1000
HttpGetTile.Execute(Request,JobDlTile)
Else
Main.DLTile_STATUS=2
End If
End Sub
Sub HttpGetTile_ResponseError (Response As HttpResponse, Reason As String, StatusCode As Int, TaskId As Int)
ToastMessageShow("Erreur de téléchargement" & StatusCode & "-" & Reason,False)
Response.Release
End Sub
J'ai bien compris que HttpClient ne supporte que 5 Dl simultanés, donc j'initie le 1er Dl au start du service, les autres Dl sont lancés au Succes du précédent.
Le souci c'est que je suis obligé de ralentir le téléchargement avec une boucle bidon For/Next sinon HttpClient stoppe aléatoirement après 8 ou 10 téléchargements sans message d'erreur.
Avec ce contournement, que je ne m'explique pas, le service fonctionne parfaitement
Je me prends la tête avec ça depuis 48 heures mais je ne comprends pas ou peu se situer le problème.
Un idée ?
Merci
Last edited: