Italian Popolamento customlistview

Fulvio75

Well-Known Member
Licensed User
Ciao a tutti, piccolo quesito a cui non riesco a dare una risposta, popolo una CustomListView con un ciclo, i dati da visualizzare sono contenuti nelle label, tutto ok fino a quando le label sono tutte riempite con i dati, nel momento in cui una label di una riga non contiene dati string="" l'app va in crash e si chiude, se invece eseguo il codice passo passo con F8 non succede nulla e funziona tutto, sembra un problema di tempi di popolamento.
Idee grazie
 

LucaMs

Expert
Licensed User
Longtime User
Chiaramente, detta così non può che sembrare incredibile (se una label non contiene testo, non c'è motivo per il quale l'app debba andare in crash).

Se non ci fai vedere il sorgente, sarà impossibile aiutarti.

Dato ciò che dici riguardo la modalità debug e passo-passo, prova a mettere Sleep(0) ma temo che potresti avere altri problemi, facendolo (ovvero dovresti essere in grado di attendere il completamento del caricamento).
 

Fulvio75

Well-Known Member
Licensed User
Intanto ho una domanda...
Che differenza c'è tra campo testo "" oppure null
Dom x as string
X=""
X= null
Non è uguale?
Va in errore quando label.text=X (null) nel ciclo però e non in debug passo passo, secondo me segna l'errore lì ma è da qualche altra parte
 

Fulvio75

Well-Known Member
Licensed User
Label.text=sub(recordset.getstring2(0) null è vuoto))

Sub(stringa as string)

If stringa=null then va in errore qui
Return ""
Else
Return ....
End

End sub
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Stai parlando di B4A e SQLite?
Quindi recordset è un oggetto Cursor.

Label.text=sub(recordset.getstring2(0) null è vuoto))
Sempre meglio usare delle variabili, non direttamente una view (a Label).
Sempre meglio usare il nome del campo, quindi GetString e non GetString2 - anche se a volte, per lavori particolari...!

Quindi prova:
B4X:
Dim Cognome As String ' non so che campo di db sia, faccio un esempio
Cognome = recordset.GetString("Cognome") ' <--- ovviamente nome del tuo campo
If Cognome = Null Then
    Cognome = ""
End If
lblCognome.Text = Cognome
 

LucaMs

Expert
Licensed User
Longtime User
Meglio ancora:
B4X:
Dim Cognome As String ' non so che campo di db sia, faccio un esempio
Cognome = SvuotaSeNull(recordset.GetString("Cognome")) ' <--- ovviamente nome del tuo campo
lblCognome.Text = Cognome


Sub SvuotaSeNull(Var As String) As String
    If Var = Null Then
        Return ""
    Else
        Return Var
    End If
End Sub

Così puoi applicarlo a qualunque campo stringa, più facilmente.
 

Fulvio75

Well-Known Member
Licensed User
ecco così funziona:

B4X:
sub (strTimeTablesId as string ) as string

Dim ReturnValue As StringBuilder

    Dim TimeTables As ResultSet

    ReturnValue.Initialize

    If strTimeTablesId = "" Or strTimeTablesId = Null Then 'qui crashava
    
        ReturnValue.Append(" ")
    
    Else

     .....

    end if

Return ReturnValue

end sub

con append vuole lo spazio tra le virgolette altrimenti si incazza… Booooooooo
 
Last edited:

Fulvio75

Well-Known Member
Licensed User
Come non detto… su un telefono funziona mentre sull'altro va in crash non capisco… proverò con le variabili che hai scritto
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Non credo che funzioni, ma prova con

B4X:
Dim Cognome As String
Cognome = "" & recordset.GetString("Cognome")
 

Fulvio75

Well-Known Member
Licensed User
Su telefoni con processore lento funziona, su quelli di ultima generazione il log dice che va in crash per valore oggetto null
 

sirjo66

Well-Known Member
Licensed User
Longtime User
..... e usare un IF immediato ??

del tipo:
B4X:
Cognome = If(recordset.GetString("Cognome") = null, "", recordset.GetString("Cognome"))
 

Fulvio75

Well-Known Member
Licensed User
Oggi provo... Prima di passare il dato alla funzione che restituisce il valore alla label intercetto il null del campo del record e non entro nella funzione scrivendo direttamente label.text = '"
 
Top