Hola.
Estoy trabajando en la manera de que la App compruebe en una base de datos un listado de nombres de archivos JPG, que posteriormente habrá de descargar a DirDefaultExternal, y así poder ser usados como imágenes de diversos botones. (Pongo el código completo más abajo)
Para ello he usado OkHttpUtils2, pero como esta descarga se hace de manera asícrona, he de buscar la manera de forzar una pausa hasta que todas las imágenes se hayan descargado antes de mostrar el conjunto de botones (con estas imágenes de fondo).
Lo he intentado con un DoWhile hasta que el evento JobDone se haya ejecutado tantas veces como imágenes a descargar. Pero me encuentro dos problemas. El primero es que no funciona, ya que mientras el DoWhile está dando vueltas, el evento JobDone no se produce. El otro problema es que aunque me funcionase, seguro que es un método muy rudimentario.
Os pido consejo.
Gracias.
Estoy trabajando en la manera de que la App compruebe en una base de datos un listado de nombres de archivos JPG, que posteriormente habrá de descargar a DirDefaultExternal, y así poder ser usados como imágenes de diversos botones. (Pongo el código completo más abajo)
Para ello he usado OkHttpUtils2, pero como esta descarga se hace de manera asícrona, he de buscar la manera de forzar una pausa hasta que todas las imágenes se hayan descargado antes de mostrar el conjunto de botones (con estas imágenes de fondo).
Lo he intentado con un DoWhile hasta que el evento JobDone se haya ejecutado tantas veces como imágenes a descargar. Pero me encuentro dos problemas. El primero es que no funciona, ya que mientras el DoWhile está dando vueltas, el evento JobDone no se produce. El otro problema es que aunque me funcionase, seguro que es un método muy rudimentario.
Os pido consejo.
Gracias.
B4X:
#Region Project Attributes
#ApplicationLabel: B4A Example
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#End Region
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
Dim SQL1 As SQL
End Sub
Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.
Private lstCategorias As List
Dim intContador As Int
End Sub
Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
'Activity.LoadLayout("Layout1")
If FirstTime Then
File.Delete(DBUtils.GetDBFolder, "basedatos.db")
Dim rutaDB As String
rutaDB=DBUtils.CopyDBFromAssets("basedatos.db")
SQL1.Initialize (rutaDB, "basedatos.db", True)
End If
ProgressDialogShow("Espera un momento")
CargaIconos 'Descarga todos los iconos desde la web de forma asícrona
Do While intContador < lstCategorias.Size 'Espera hasta que la descarga de todos los archivos finalice
Log (intContador & " - " & lstCategorias.Size)
Loop
ProgressDialogHide
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub CargaIconos
Dim lstIconos As List
Dim stUnIcono () As String
'Carga todas las categorías desde la BD
lstIconos = DBUtils.ExecuteMemoryTable(SQL1, "SELECT imagen_cat FROM categorias", Null,0)
For NumIcono = 0 To lstIconos.Size - 1
stUnIcono = lstIconos.Get(NumIcono)
Dim job As HttpJob
job.Initialize(stUnIcono(0), Me)
job.Download("http://www.miservidor.com/" & stUnIcono(0))
Next
End Sub
Sub JobDone(Job As HttpJob)
If Job.Success Then
Dim out As OutputStream
out = File.OpenOutput(File.DirDefaultExternal,Job.JobName,False )
File.Copy2(Job.GetInputStream, out)
out.Close
Log ("OK - " & Job.JobName)
Else
Log("FALLO - " & Job.JobName)
End If
Job.Release
intContador = intContador + 1
End Sub