2016-07-29 9 views
0

Ich arbeite im Android Studio, 2.1.2.java.lang.ClassCastException - Gleiches Objekt - Zwei Klassen, warum?

Ich habe eine mysteriöse Besetzung Ausnahme zwischen zwei Aktivitäten.

Im ersten Aktions habe ich diese Arraylist:

 Intent intent = new Intent(prenota_mostra_cellulari.this, prenota_mostra_dettagli.class); 

       Bundle spedizione = new Bundle(); 
        spedizione.putString("Nome",notizia.get_Marca()); 
        spedizione.putString("Foto",notizia.get_Foto()); 
        spedizione.putString("Marca",notizia.get_Nome()); 
        spedizione.putParcelableArrayList("Riparazioni",nuovo); 

        intent.putExtras(spedizione); 
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

In zweiter Aktivität i dies verwende für:

ArrayList<riparazione> nuovo = notizia.get_Elenco(); 

ich die Arraylist (parcellable) in einem Bündel für Senden an eine anderen Aktivität einfügen erholen Arraylist

ArrayList<riparazione> nuovo = new ArrayList<>(); 

    Intent intent = getIntent(); 
    if (null != intent) { 
     dati_cel = intent.getExtras(); 
     nuovo = dati_cel.getParcelableArrayList("Riparazioni"); 

     Log.d("Dati", String.valueOf(dati_cel.size())); 
     Log.d("Dati arraylist", String.valueOf(dati_cel.size())); 
     riparazione dads = nuovo.get(9); 
    } 

NOW in der Leitung von riparazione dads = nuovo.get(9);

Ich erhalte einen Gussfehler:

Verursacht durch: java.lang.ClassCastException: com.example.luca.ireplace.orario nicht gegossen werden kann, um com.example.luca.ireplace.riparazione

Ich habe alles versucht, mit und ohne Bundle zum Senden, die Klasse Ausgabe Ende Ausgang sind die gleichen, warum dieses Casting? Und wie löse ich?

Vielen Dank für jede Hilfe

+0

Sieht aus wie ein Klassenladerproblem. Gleiche Klasse auf verschiedenen Classloader bekommen dieses Problem – Jens

Antwort

1

Der Fehler ist nicht in dem Code, den Sie auf dem Laufenden. Denken Sie daran, dass Listen (und Generika im Allgemeinen) unter Typlöschung leiden. Das heißt, obwohl Sie nuovo als ArrayList<riparazione> deklariert haben, überprüft Java zur Laufzeit nicht, ob Sie riparazione s zur Liste hinzufügen oder ob die Liste tatsächlich riparazione s enthält, wenn Sie sie übergeben.

Sie haben irgendwie eine orario in die Liste eingefügt. Der Fehler tritt hier:

riparazione dads = nuovo.get(9); 

Wir haben keine Ahnung, wie die nuovo Liste ursprünglich gebaut wird, aber der Fehler ist offensichtlich nicht in dem Code, den Sie auf dem Laufenden.

+0

, wenn ich ein Objekt hinzufügen riparazione: riparazione a1 = neue riparazione (Strig a, String b, String c, String d) bei nuovo. Das Hinzufügen ist in Ordnung. –

+0

Ja, aber irgendwie hat die 'nuovo'-Liste einen 'orario' bekommen. Ich weiß nicht, wie es dahin gekommen ist, aber es ist dort angekommen (das ist es, was der Fehler dir sagt). –