B4X
java.lang.Object[] cannot be cast to java.lang.String[] – B4X ClassCastException
DBResult.Rows restituisce righe composte da Object[], non da String[]. Dichiarare la variabile del ciclo come String[] forza un cast incompatibile e produce ClassCastException; usando Object[] e convertendo solo i valori necessari il codice funziona in B4A e B4J.
Cosa significa questo errore?
DBResult.Rows restituisce righe composte da Object[], non da String[]. Dichiarare la variabile del ciclo come String[] forza un cast incompatibile e produce ClassCastException; usando Object[] e convertendo solo i valori necessari il codice funziona in B4A e B4J.
Messaggio originale
java.lang.Object[] cannot be cast to java.lang.String[]Contesto e parole chiave
Alias
- DBResult Rows cast
- Object array String array
Messaggi alternativi
- ClassCastException durante For Each row() As String In res.Rows
Prodotti
- B4X
- DBResult
Piattaforme
- Android
- Linux
- macOS
- Windows
Parole chiave
- b4x object cannot be cast string array
- classcastexception b4j dbresult
- dbresult rows object b4a
Cause possibili
Tipo reale delle righe non corrispondente al cast
La struttura Rows contiene array di Object perché le colonne possono avere tipi diversi. Dichiarare ogni riga come String[] presume un tipo più specifico di quello realmente prodotto dal risultato del database.
comuneDiagnosi
Dichiarazione del For Each sulle righe DBResult
Confrontare il tipo dichiarato nel ciclo con res.Rows e verificare se il log indica il cast da Object[] a String[].
Come leggere il risultato. Il messaggio Object[] cannot be cast to String[] conferma che il problema è il tipo della riga, non il contenuto della singola colonna.
Risoluzione
Iterare come Object[] e convertire i singoli valori
Mantenere il tipo restituito dal database e applicare As(String) o una conversione equivalente soltanto alla colonna che deve essere trattata come testo.
- Cambiare il tipo della riga da String[] a Object[].
- Leggere row(0), row(1) e le altre colonne con il controllo del tipo necessario.
- Ripetere la query in B4A e B4J per verificare che il cast non venga più eseguito sull'intero array.
For Each row() As Object In res.RowsDomande frequenti
Devo convertire tutta la riga in String[]?
No. La riga va mantenuta come Object[]; converti soltanto gli elementi che sai essere testuali dopo averli letti dall'indice corretto.
Approfondimenti
- [SOLVED] [B4X] ClassCastException Object[] cannot be cast to String[] thread_b4x_verificato