Spanish [SOLUCIONADO] Descargar imagen de WEB y guardarla en un cache

desof

Well-Known Member
Licensed User
Longtime User
Hola utilizo este trozo de código que descarga correctamente y bastante rápido una imagen desde la WEB.

B4X:
Sub Activity_Resume
    Dim links As Map
    links.Initialize
    links.Put(imgFarma, "http://www.myweb.com/sanapp/images/farmacias/dizza.png")   
    CallSubDelayed2(ImageDowloader, "Download", links)
End Sub

El tema es que esto se repite varias veces en el código y es par optimizar pensé que seria bueno la próxima vez que abra la aplicación las busque en el cache en vez de descargar como hacen los navegadores.

He estado mirando el ejemplo de Erel de flickr pero no lo comprendo la verdad.
Si alguien me ayuda en Español por favor
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Desof, tu pregunta es muy generica y poco concreta, si lo que quieres es bajarte una imagen, y si al arrancar la aplicación lo que quieres es saber si existe para no volver a descargar, puedes hacerlo asi:

Este es el ejemplo de Erel donde pinta las imagenes bajadas
B4X:
Sub ImagesJobDone (Job As HttpJob)
   If Job.Success = True Then
     ivs(ImageIndex).Bitmap = Job.GetBitmap
     ivs(ImageIndex).Gravity = Gravity.FILL
   End If
   ImageIndex = ImageIndex + 1
   If ImageIndex = 9 Then
     ProgressDialogHide
   End If
End Sub

Este es el mismo pero guardando la imagen
B4X:
Sub ImagesJobDone (Job As HttpJob)
   If Job.Success = True Then
     ivs(ImageIndex).Bitmap = Job.GetBitmap
     ivs(ImageIndex).Gravity = Gravity.FILL
     ' -------------- nuevo -----------------
     ' guardamos la imagen bajada
     Dim out As OutputStream
     Try
          out = File.OpenOutput(DirectorioDondeQuierasGuardarLaImagen,NombreImagen, False)  
          ivs(ImageIndex).WriteToStream (out,100,"JPEG")   ' el 100 es la calidad (la máxima es 100)
          out.Close
       Catch
       End Try
     ' -------------- nuevo -----------------
   End If
   ImageIndex = ImageIndex + 1
   If ImageIndex = 9 Then
     ProgressDialogHide
   End If
End Sub

B4X:
Sub Activity_Resume
  If File.Exists(DirImagen, NombreImagen) = False Then  
      ' llamar a bajarse la imagen
  else
     ' pintar la imagen
  end if
Saludos
 

desof

Well-Known Member
Licensed User
Longtime User
Hola Desof, tu pregunta es muy generica y poco concreta, si lo que quieres es bajarte una imagen, y si al arrancar la aplicación lo que quieres es saber si existe para no volver a descargar, puedes hacerlo asi:

Este es el ejemplo de Erel donde pinta las imagenes bajadas
B4X:
Sub ImagesJobDone (Job As HttpJob)
   If Job.Success = True Then
     ivs(ImageIndex).Bitmap = Job.GetBitmap
     ivs(ImageIndex).Gravity = Gravity.FILL
   End If
   ImageIndex = ImageIndex + 1
   If ImageIndex = 9 Then
     ProgressDialogHide
   End If
End Sub

Este es el mismo pero guardando la imagen
B4X:
Sub ImagesJobDone (Job As HttpJob)
   If Job.Success = True Then
     ivs(ImageIndex).Bitmap = Job.GetBitmap
     ivs(ImageIndex).Gravity = Gravity.FILL
     ' -------------- nuevo -----------------
     ' guardamos la imagen bajada
     Dim out As OutputStream
     Try
          out = File.OpenOutput(DirectorioDondeQuierasGuardarLaImagen,NombreImagen, False) 
          ivs(ImageIndex).WriteToStream (out,100,"JPEG")   ' el 100 es la calidad (la máxima es 100)
          out.Close
       Catch
       End Try
     ' -------------- nuevo -----------------
   End If
   ImageIndex = ImageIndex + 1
   If ImageIndex = 9 Then
     ProgressDialogHide
   End If
End Sub

B4X:
Sub Activity_Resume
  If File.Exists(DirImagen, NombreImagen) = False Then 
      ' llamar a bajarse la imagen
  else
     ' pintar la imagen
  end if
Saludos

Gracias amigo tienes razón no soy demasiado claro!
Pero tu me entendiste a la perfección!
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Desof

Si ya resolviste el problema, podrias añadir al título [SOLUCIONADO] así ayudamos a mejorar el foro.

Gracias

Saludos
 
Top