ClassCastException androide en el arranque de la actividad
-
27-09-2019 - |
Pregunta
Tengo un programa de actividad sencilla en el androide. básicamente la clase sólo se extiende la actividad. Pero cuando lo inicio me sale un ClassCastException en el constructor de mi clase. yo incluso no tiene un constructor definido, por lo que debe estar en el constructor de la superclase que es la actividad.
desafortunadamente el depurador NO DA ninguna información detallada sobre qué clase que está tratando de molde.
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)
es el único código
package com.test;
import android.app.Activity;
public class MyApp extends Activity {
}
Solución
- Abrir
AndroidManifest.xml
- Para
application
etiqueta ??li> -
android:name
elimina el atributo (si existe) - Añadir
android:name="android.app.Application"
atributo
Esto es lo que hice y el problema había desaparecido.
P.S:. En el paso 4 utilizar el nombre de la clase de aplicaciones personalizadas si tiene uno (que es opcional)
Otros consejos
Yo tenía el mismo problema.
En mi caso tuve una clase que la aplicación extendida que se hace referencia en el archivo de manifiesto como un atributo de la etiqueta de aplicación.
Cuando me re-factorizada la clase Eclipse no incluyó la referencia en el manifiesto (comprensiblemente, pero frustrante y confusa) que dio lugar a este problema.
Esto se corresponde también 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 Retitulé el problema se resolvió.
He cometido un error tonto,
my_textView = (<b>Button</b>) findViewById(R.id.tvMyTextView);
y esto provocó la ClassCastException ..
i cambió esto a lo obvio,
my_textView = (<b>TextView</b>) findViewById(R.id.tvMyTextView);
y funcionó ..
No sé cómo, pero todo lo que puedo decir es que tales errores tontos también pueden causar el problema anterior ..
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
añadir esta y publicar su Manifest.xml completa ??p>
Yo tenía el mismo problema que ocurren de vez en cuando, a veces, aparentemente provocado por elementos re-pedidos en un diseño XML.
Si usted permite que la aplicación continúe la ejecución después de que la excepción no detectada, se debe constatar que se obtiene una StackTrace mucho más útil para "Logcat adb" de lo que puede salir fácilmente del depurador en el punto donde se detiene.
Esto suele señalar que en el lugar donde realmente se produjo la excepción, que en general no es el lugar donde se detiene en el depurador.
En mi caso, que parecía ser una falta de correspondencia entre identificadores de recursos - mover las cosas en el archivo XML parecía confundir las cosas de tal manera que cuando lo hice view.findViewById (R.id.something) no me la volvía objeto correcto. Estaba echando el objeto a una TextView, que debería haber sido perfectamente válida de acuerdo con el contenido de mi diseño de XML, pero estaba fallando.
Es posible que en realidad tienen un error en el que está haciendo un reparto no válido, lo que sin duda hará que esta excepción a suceder, pero en mi caso forzando una limpia y reconstruir resuelto el problema - que regenera los diseños compilados y recursos identificaciones a partir de cero, y todo funcionaba como se esperaba.
Si se utiliza Google Maps:
<uses-library android:name="com.google.android.maps" />
Recuerde esta línea. No puedo creer que se me olvidó y perdido tanto tiempo.
Estoy de acuerdo con la respuesta de Mahesh .. Esto ocurrirá debido a la asignación de la vista sin poner en ...
Lo mismo sucederá si usted está lanzando una vista ImageButton al botón Ver o alguna otra vista de clases.
Yo tenía el mismo problema, y ??que descubra, que esto causó mal uso de preferences.xml
<CheckBoxPreference android:key="@+id/string" />
tenía que ser el cambio a
<CheckBoxPreference android:key="string" />
tenido un problema similar con un ClassCastException diciéndome que no podía emitir un EditarTexto como un TextView. Yo no estaba tratando. Tratado de limpiar el proyecto pero recibió varios 'puede presentar no elimina errores ...'. Eclipse cerrada, se volvió a abrir, limpiar el proyecto. El problema desapareció. Es evidente que esto no funcionará en todos los casos, pero es una posibilidad.