Autore Topic: Errore di casting nel file layout  (Letto 560 volte)

Offline Giacomo79

  • Utente junior
  • **
  • Post: 123
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Play Store ID:
    Big and Fish
  • Sistema operativo:
    Android 2.3
Errore di casting nel file layout
« il: 11 Giugno 2014, 17:35:05 CEST »
0
Salve a tutti,
non capisco un errore di casting che ottengo in un layout. Questo il file xml:
Codice (XML): [Seleziona]
<com.GamePanelAbstract
            android:id="@+id/surfaceMainGame"
            android:layout_below="@id/BannerPanel"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
Mentre nell'activity ho questo codice:
Codice (Java): [Seleziona]
((GamePanel) findViewById(R.id.surfaceMainGame)).Init(size);La classe GamePanel eredita da GamePanelAbstract, e se lancio l'applicazione ottengo questo errore:
Codice (Java): [Seleziona]
Caused by: java.lang.ClassCastException: com.GamePanelAbstract cannot be cast to com.GamePanelUna cosa non capisco: il casting non dovrebbe essere al contrario? E quindi l'errore non esserci?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Errore di casting nel file layout
« Risposta #1 il: 11 Giugno 2014, 18:21:24 CEST »
0
Perchè non casti a GamePanelAbstract ?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Giacomo79

  • Utente junior
  • **
  • Post: 123
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Play Store ID:
    Big and Fish
  • Sistema operativo:
    Android 2.3
Re:Errore di casting nel file layout
« Risposta #2 il: 11 Giugno 2014, 18:24:38 CEST »
0
Perchè non casti a GamePanelAbstract ?
Non ha senso castare a GamePanelAbstract, a me serve che l'oggetto sia generico nel layout, e specifico a runtime (nel codice dell'activity). E' il concetto di polimorfismo della programmazione a oggetti.

O c'è qualcosa che mi sfugge.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Errore di casting nel file layout
« Risposta #3 il: 11 Giugno 2014, 18:38:08 CEST »
0
Non ha senso castare a GamePanelAbstract, a me serve che l'oggetto sia generico nel layout, e specifico a runtime (nel codice dell'activity). E' il concetto di polimorfismo della programmazione a oggetti.

O c'è qualcosa che mi sfugge.

Non so come è fatta la tua app, ma l'eccezione mi sembra ti stia dicendo che a runtime hai un GamePanelAbstract.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Giacomo79

  • Utente junior
  • **
  • Post: 123
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Play Store ID:
    Big and Fish
  • Sistema operativo:
    Android 2.3
Re:Errore di casting nel file layout
« Risposta #4 il: 11 Giugno 2014, 19:05:42 CEST »
0
Non so come è fatta la tua app, ma l'eccezione mi sembra ti stia dicendo che a runtime hai un GamePanelAbstract.
La spiegazione mi sembra esaustiva.

Ho un oggetto Abstract che estende una SurfaceView, poi ho un oggetto specifico che estende l'abstract.
Nell'xml la surfaceview è di tipo Abstract e la voglio castare all'oggetto specifico che estende la abstract. E nella programmazione a oggetti questo è possibile, perchè l'oggetto specifico figlio E' considerato un oggetto abstract.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Errore di casting nel file layout
« Risposta #5 il: 11 Giugno 2014, 19:44:37 CEST »
0
Ho un oggetto Abstract che estende una SurfaceView, poi ho un oggetto specifico che estende l'abstract.
Nell'xml la surfaceview è di tipo Abstract e la voglio castare all'oggetto specifico che estende la abstract. E nella programmazione a oggetti questo è possibile, perchè l'oggetto specifico figlio E' considerato un oggetto abstract.

Forse mi confondo io, ma provo a farti un esempio di cosa voglio dire: ho una classe FiguraGeometrica, la estendo nelle classi Cerchio e Rettangolo. Posso a questo punto avere un array di tipo FiguraGeometrica, in cui metto Cerchi e Rettangoli. E' chiaro che puoi castare la FiguraGeometrica in Cerchio, ma deve essere veramente una classe Cerchio. Nel tuo caso mi sembra di capire che l'eccezione ti stia dicendo questo: guarda è proprio un oggetto FiguraGeometrica, non è ne' un Cerchio ne' un Rettangolo.

Detto in altro modo: ce l'hai un punto del codice in cui crei una istanza di GamePanel e vai a sostituirla alla versione GamePanelAbstract creata dal layout? (perchè il solo casting non ti trasforma la versione Abstract in versione non-Abstract).
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Giacomo79

  • Utente junior
  • **
  • Post: 123
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Play Store ID:
    Big and Fish
  • Sistema operativo:
    Android 2.3
Re:Errore di casting nel file layout
« Risposta #6 il: 11 Giugno 2014, 21:05:14 CEST »
0
(perchè il solo casting non ti trasforma la versione Abstract in versione non-Abstract).
Qui c'è il problema, ho capito.