2010-10-01 15 views
12

tengo un programa de actividad simple en Android. básicamente la clase simplemente extiende la Actividad. Pero cuando lo comienzo obtengo una ClassCastException en el constructor de mi clase. ni siquiera tengo un constructor definido, por lo que debe estar en el constructor de la superclase que es Actividad.android classcastexception en la actividad de inicio

lamentablemente, el depurador no proporciona ninguna información detallada sobre qué clase está intentando emitir.

aquí es el 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] 

y cuando miro en el RuntimeException me sale:

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

el único código es

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

} 
+0

¿Podría agregar el código del programa aquí, por favor? –

+1

no se puede distinguir nada de lo anterior. publique su código de programa por favor. – Umesh

+3

@clamp: pasa la excepción y permite que Android recopile la información de la pila. Véalo en el panel LogCat en su perspectiva DDMS. Eso puede darle más información sobre lo que está sucediendo. – CommonsWare

Respuesta

24
  1. abierto AndroidManifest.xml
  2. Buscar etiqueta application
  3. elimina el atributo android:name (si existe)
  4. Agregar atributo android:name="android.app.Application"

Esto es lo que hice y el problema había desaparecido.

P.S: En el paso 4 use el nombre de clase de aplicación personalizado si tiene uno (que es opcional).

+0

gracias, pero eso no ayuda. ¿Realmente quieres poner la cadena "android.app.Application" allí o en realidad el nombre de la aplicación? – clamp

+2

editó la respuesta, espero que sea más clara. Sí, me refiero exactamente a "android.app.Application" –

+0

¡gracias por haber solucionado el problema! – clamp

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

     setContentView(R.layout.main); 
} 

agregar este y después de su completa Manifest.xml

5

que tenía el mismo problema.

En mi caso, tuve una clase que extendía la aplicación a la que se hacía referencia en el archivo de manifiesto como un atributo de la etiqueta de la aplicación.

Cuando volví a factorizar la clase, Eclipse no incluyó la referencia en el manifiesto (comprensible pero frustrante y confusa) que dio como resultado este problema.

Esto también se relaciona con la respuesta de Maxim pero la explicación parece ser la disparidad.

Cuando cambié el nombre del atributo para que coincida con el archivo que renombré, se resolvió el problema.

+0

Sé que el problema es viejo pero recién publicado para intentar ayudar a otros que puedan encontrarlo en el futuro. – slipp3ry

+0

muy útil. Enfrentando el mismo problema, ¿podría ayudarme a resolver este problema? – Sreeram

0

Si utiliza los mapas de Google:

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

Recuerde esta línea. No puedo creer que lo haya olvidado y haya perdido tanto tiempo.

4

he cometido un error tonto,

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

y esto hizo que el ClassCastException ..

he cambiado esto a lo obvio,

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

y funcionó ..

I no sabe, pero todo lo que puedo decir es que tales errores tontos también pueden causar el problema anterior ..

+0

Sí, esto es muy cierto! Pasé aproximadamente tres horas tratando de resolver todos estos errores cuando necesitaba ImageButton y no Button y desaparecieron todos los errores presentes en esta publicación. – WebDevDanno

0

Estoy de acuerdo con la respuesta de Mahesh .. Esto ocurrirá debido a la asignación de la vista sin poner ...

Esto también ocurrirá si usted está lanzando una ImageButton Ver a la vista de botones o alguna otra clase de vista.

0

que tenía el mismo problema, y ​​averiguar, que esto causó mal uso de preferences.xml <CheckBoxPreference android:key="@+id/string" /> tenía que ser el cambio a <CheckBoxPreference android:key="string" />

2

que tenía el mismo problema que ocurren de vez en cuando, a veces, aparentemente provocada por re -ordenando elementos en un diseño XML.

Si permite que la aplicación continúe ejecutándose después de la excepción no detectada, debería encontrar que obtiene una stacktrace mucho más útil en "adb logcat" que puede salir fácilmente del depurador en el punto donde se detiene.

Esto generalmente lo indicará en la ubicación donde realmente ocurrió la excepción, que generalmente no es la ubicación donde se detiene en el depurador.

En mi caso, parecía haber una falta de coincidencia entre los ID de recursos: mover cosas en el archivo XML parecía confundir cosas tales que cuando lo veía view.findViewById (R.id.something) no me lo devolvía el objeto correcto. Estaba lanzando el objeto a un TextView, que debería haber sido perfectamente válido de acuerdo con el contenido de mi diseño XML, pero estaba fallando.

Es posible que tenga un error en el que está realizando un lanzamiento no válido, lo que sin duda hará que ocurra esta excepción, pero en mi caso forzar una limpieza y reconstruir resuelto el problema, regeneró los diseños compilados y ID de recursos desde cero, y todo funcionó como se esperaba.

+0

Sí, tenía exactamente el mismo estuche. Limpió el proyecto y funcionó. – akshay7692

+0

+1 Debería haberlo leído primero. ¡Gracias! – Suzi

0

Tuve un problema similar con una ClassCastException que me decía que no podía convertir un EditText como TextView. No estaba tratando de hacerlo. Intenté limpiar el proyecto pero recibí varios errores de "no se puede eliminar el archivo ...". Cerró Eclipse, lo volvió a abrir, limpió el proyecto. El problema desapareció Claramente esto no funcionará en todos los casos, pero es una posibilidad.

Cuestiones relacionadas