Italian finestra stato aggiornamento query [risolto]

zenlab

Member
Licensed User
Longtime User
ciao, sto sviluppando un applicazione per android che tramite una richiesta HttpJob scarica un file json che poi inserisce in un database sqlite locale...
ho creato una classe con due funzioni di tipo "resumableSub":
getelenco() che scarica il json e
processElenco() che carica nelle varie tabelle...

poi ho richiamato da un activity le due funzioni in questo modo:
B4X:
  overlow.Visible = True
    loading.Text = "Richiesta Elenco interventi al server....."
Wait For(WS.GetElenco()) Complete (status As Boolean)
    If status Then
        loading.Text = "Elaborazione Dati....."
        Wait For(WS.processElenco()) Complete (status As Boolean)
            If status Then
            createlist(True)
            End If
    End If
    overlow.Visible = False

Il problema è che il loading.Text che è una semplice label, non si aggiorna correttamente....
provato anche con ProgressDialogShow2 ma anche questo mostra il primo e poi ciccia....
qualche idea di come risolvere

ps
overlow è un pannel che copre il contenuto...
 

udg

Expert
Licensed User
Longtime User
Loading.Trxt cambia solo se status è True..
 

LucaMs

Expert
Licensed User
Longtime User
Non mi convince il fatto che tu abbia usato lo stesso nome per la variabile restituita dalle due routine, ovvero "status" (benché in una situazione normale non ci sarebbero problemi, le Resumable sono ancora un po' misteriose :D)
 

zenlab

Member
Licensed User
Longtime User
:) hi camiato nome alla variabile status...chiamandola statusa e statusb... ora il prolema sembra leggermente diverso....
in pratica rimane il PRIMO MESSAGGIO per tutta la durate dell GetElenco() e per quasi tutta la procedura del processElenco() (vedo dai log i vari insert nel database....) quindi per un istante mostra il SECONDO MESSAGGIO e poi chiude....
B4X:
overlow.Visible = True
    loading.Text = "PRIMO MESSAGGIO"
    Wait For(WS.GetElenco()) Complete (statusA As Boolean)
    If statusA Then
        loading.Text = "SECONDO MESSAGGIO"
        Wait For(WS.processElenco()) Complete (statusB As Boolean)
        If statusB Then
            loading.Text = "FINE"
            createlist(True)
        End If
    End If
 

Star-Dust

Expert
Licensed User
Longtime User
metti uno Sleep(1000) e ti mantiene il messaggio almeno un secondo.

Oppure cosi (Calcola il tempo di attesa del WaitFor e per differenza fa aspettare un secondo)
B4X:
'
    overlow.Visible = True
    loading.Text = "PRIMO MESSAGGIO"
    Wait For(WS.GetElenco()) Complete (statusA As Boolean)
    If statusA Then
        loading.Text = "SECONDO MESSAGGIO"
        Dim T as Long= DateTime.Now + 1000
        Wait For(WS.processElenco()) Complete (statusB As Boolean)
        Sleep(T-DateTime.Now)
        If statusB Then
            loading.Text = "FINE"
            createlist(True)
        End If
    End If
 

zenlab

Member
Licensed User
Longtime User
ho provato con lo sleep....e ora funziona!!! MITICO!
l'ho messo però subito dopo il loading.text = ... impostandolo direttamente ad 1 secondo....
con il loading.invalidate invece il risultato non cambiava (senza lo sleep)
direi che ora sono apposto! Grazie 1000 dell'aiuto e alla prossima
 
Top