French Petit souci HttpClient

scrat

Active Member
Licensed User
Longtime User
Bonjour

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:

scrat

Active Member
Licensed User
Longtime User
Pb résolu !

Il ne faut pas oublier de libérer Response et tout rentre dans l'ordre

Code modifié dans le 1er post
 
Last edited:
Top