java.lang.Object[] cannot be cast to java.lang.String[] – B4X ClassCastException

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.

comune

Diagnosi

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

Difficoltà: facileRischio: basso

Mantenere il tipo restituito dal database e applicare As(String) o una conversione equivalente soltanto alla colonna che deve essere trattata come testo.

  1. Cambiare il tipo della riga da String[] a Object[].
  2. Leggere row(0), row(1) e le altre colonne con il controllo del tipo necessario.
  3. Ripetere la query in B4A e B4J per verificare che il cast non venga più eseguito sull'intero array.
B4X
For Each row() As Object In res.Rows

Domande 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

Schede correlate