2010-10-01 15 views
12

Ho un semplice programma di attività in Android. in pratica la classe estende semplicemente Activity. Ma quando lo avvio ottengo un ClassCastException nel costruttore della mia classe. Non ho nemmeno definito un costruttore, quindi deve essere nel costruttore della superclasse che è Activity.classcastexception android all'avvio attività

sfortunatamente il debugger non fornisce alcuna informazione dettagliata su quale classe sta provando a trasmettere.

Ecco l'stacktrace:

Thread [<1> main] (Suspended (exception RuntimeException)) 
    ActivityThread$PackageInfo.makeApplication(boolean, Instrumentation) line: 649 
    ActivityThread.handleBindApplication(ActivityThread$AppBindData) line: 4232 
    ActivityThread.access$3000(ActivityThread, ActivityThread$AppBindData) line: 125  
    ActivityThread$H.handleMessage(Message) line: 2071 
    ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
    Looper.loop() line: 123 
    ActivityThread.main(String[]) line: 4627  
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] 
    Method.invoke(Object, Object...) line: 521 
    ZygoteInit$MethodAndArgsCaller.run() line: 868 
    ZygoteInit.main(String[]) line: 626 
    NativeStart.main(String[]) line: not available [native method] 

e quando guardo in RuntimeException ottengo:

detailMessage "Unable to instantiate application com.test.MyApp: java.lang.ClassCastException: com.test.MyApp" (id=830067694464)

l'unico codice è

package com.test; 
import android.app.Activity; 
public class MyApp extends Activity { 

} 
+0

Potrebbe aggiungere qui il codice del programma, per favore? –

+1

non riesco a capire nulla da quanto sopra. inserisci il tuo codice di programma per favore. – Umesh

+3

@clamp: supera l'eccezione e consenti a Android di raccogliere le informazioni sullo stack. Visualizzalo nel riquadro LogCat nella prospettiva DDMS. Questo potrebbe darti più informazioni su cosa sta succedendo. – CommonsWare

risposta

24
  1. Aperto AndroidManifest.xml
  2. Ricerca tag application
  3. Rimuovere attributo android:name (se esiste)
  4. Add attributo android:name="android.app.Application"

Questo è quello che ho fatto e il problema era andato.

P.S: Al punto 4 utilizzare il nome della classe dell'applicazione personalizzata se ne è disponibile uno (facoltativo).

+0

grazie, ma che non aiuta. vuoi davvero impostare la stringa "android.app.Application" lì o effettivamente il nome dell'applicazione? – clamp

+2

modificato la risposta, spero che sia diventato più chiaro. Sì, intendo esattamente "android.app.Application" –

+0

grazie che ha davvero risolto il problema! – clamp

2
@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 
} 

aggiungere questo e inserisci la tua piena Manifest.xml

5

Ho avuto lo stesso problema.

Nel mio caso ho avuto una classe con estensione dell'applicazione a cui è stato fatto riferimento nel file manifest come attributo del tag dell'applicazione.

Quando ho rielaborato la classe Eclipse non ha incluso il riferimento nel manifest (comprensibilmente ma frustrante e confuso) che ha provocato questo problema.

Questo si collega anche alla risposta di Maxim ma la spiegazione sembrerebbe essere la disparità.

Quando ho cambiato il nome dell'attributo in modo che corrisponda al file che ho rinominato, il problema è stato risolto.

+0

so che il problema è vecchio ma appena pubblicato per cercare di aiutare gli altri che potrebbero imbattersi in questo in futuro. – slipp3ry

+0

molto utile .. Di fronte allo stesso problema, potresti aiutarmi a risolvere questo problema. – Sreeram

0

Se si utilizza google maps:

<uses-library android:name="com.google.android.maps" /> 

Ricordati di questa linea. Non posso credere di averlo dimenticato e perso così tanto tempo.

4

Ho fatto un errore stupido,

my_textView = (<b>Button</b>) findViewById(R.id.tvMyTextView); 

e questo ha causato il ClassCastException ..

ho cambiato questo per l'ovvio,

my_textView = (<b>TextView</b>) findViewById(R.id.tvMyTextView); 

e ha funzionato ..

Non so come, ma tutto quello che posso dire è che questi errori stupidi possono anche causare il problema di cui sopra ..

+0

Sì, questo è molto vero! Ho passato circa tre ore a cercare di risolvere tutti questi errori quando avevo bisogno di ImageButton e non di Button e tutti gli errori presenti in questo post sono scomparsi! – WebDevDanno

0

sono d'accordo con la risposta di Mahesh .. Questo avverrà grazie ad assegnare la vista senza colata ...

Ciò si verifica anche se si sta gettando un ImageButton Visualizza in Visualizza pulsanti o in un'altra classe di visualizzazione.

0

ho avuto lo stesso problema, e io a capire, che questo ha causato l'uso errato in preferences.xml <CheckBoxPreference android:key="@+id/string" /> doveva essere il cambiamento di <CheckBoxPreference android:key="string" />

2

Ho avuto lo stesso problema che si verificano di tanto in tanto, a volte apparentemente innescato da re -ordinamento degli elementi in un layout XML.

Se si consente all'app di continuare l'esecuzione dopo l'eccezione non rilevata, è necessario trovare uno stacktrace molto più utile in "adb logcat" di quello che si può facilmente ottenere dal debugger nel punto in cui si arresta.

Questo di solito indica la posizione in cui si è verificata l'eccezione, che in genere non è la posizione in cui si ferma nel debugger.

Nel mio caso, sembrava che ci fosse una discrepanza tra gli ID delle risorse: spostare le cose nel file XML sembrava confondere cose tali che quando ho fatto view.findViewById (R.id.qualcosa) non mi restituiva l'oggetto corretto. Stavo lanciando l'oggetto a TextView, che avrebbe dovuto essere perfettamente valido in base al contenuto del mio layout XML, ma si stava bloccando.

Potreste scoprire che in realtà hanno un bug per cui si sta facendo un cast non valido, che sarà certamente causare questa eccezione accada, ma nel mio caso costringendo un ambiente pulito e ricostruire risolto il problema - è rigenerato i layout compilati e ID risorse da zero e tutto ha funzionato come previsto.

+0

Sì, ho avuto lo stesso identico caso. Ha pulito il progetto e ha funzionato. – akshay7692

+0

+1 Avrei dovuto leggerlo prima. Grazie! – Suzi

0

Aveva un problema simile a ClassCastException che mi diceva che non potevo trasmettere un EditText come TextView. Non stavo provando a Ho cercato di pulire il progetto ma ho ricevuto diversi errori "impossibile eliminare il file ...". Chiuso Eclipse, lo riapri, pulisce il progetto. Il problema è andato via. Chiaramente questo non funzionerà in ogni caso, ma è una possibilità.

Problemi correlati