2011-02-02 19 views
32

Tengo un problema con una de mis aplicaciones y me preguntaba si alguien podría darme alguna idea de lo que puede causarla.Android ClassNotFoundException

estoy recibiendo un ClassNotFoundException, la importante línea de abajo es

E/AndroidRuntime(21982): Caused by: java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in loader [email protected] 

Ahora esta aplicación ha estado fuera durante Hace más de un año y 2 días tuve dos usuarios separados en contacto conmigo en relación con este tema, uno en un HTC Wildfire (2.1) y uno a Samsung Galaxy S (?). Ahora no puedo volver a crear este problema en mis dispositivos (2.2 y 1.6) o un emulador (2.1) y realmente no puedo entender por qué esta clase no puede ser encontrada por el cargador de clases. ¡He pasado un tiempo buscando en Google sin éxito, y espero que alguien tenga algunos consejos! Solo parece ser cuando se carga una actividad que cuando se configura contentView, trata de inflar una vista personalizada llamada GoBoardView que extiende la clase View, esto es solo hacer un simple lienzo de dibujo y no está utilizando ninguna biblioteca de terceros o cualquier otra clase que tenga un nombre de paquete clash o algo así.

Por favor ayuda! En caso de que sea un problema de compilación, estoy actualizando todos mis SDK y ADT a través de Eclipse, ya que estaba compilando contra 1.6 y usando el antiguo ADT, pero no tengo idea de si esto ayudará a que valga la pena intentarlo. ¡Cualquier consejo sería genial, gracias! (Ver más abajo para EDITAR)

E/AndroidRuntime(21982): java.lang.RuntimeException: Unable to start activity ComponentInfo{couk.doridori.goigoFull/couk.doridori.goigoFull.Board}: android.view.InflateException: Binary XML file line #14: Error inflating class couk.doridori.goigo.customUI.GoBoardView 
E/AndroidRuntime(21982): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596) 
E/AndroidRuntime(21982): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621) 
E/AndroidRuntime(21982): at android.app.ActivityThread.access$2200(ActivityThread.java:126) 
E/AndroidRuntime(21982): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932) 
E/AndroidRuntime(21982): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(21982): at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime(21982): at android.app.ActivityThread.main(ActivityThread.java:4603) 
E/AndroidRuntime(21982): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(21982): at java.lang.reflect.Method.invoke(Method.java:521) 
E/AndroidRuntime(21982): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
E/AndroidRuntime(21982): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
E/AndroidRuntime(21982): at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime(21982): Caused by: android.view.InflateException: Binary XML file line #14: Error inflating class couk.doridori.goigo.customUI.GoBoardView 
E/AndroidRuntime(21982): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576) 
E/AndroidRuntime(21982): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618) 
E/AndroidRuntime(21982): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) 
E/AndroidRuntime(21982): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) 
E/AndroidRuntime(21982): at android.view.LayoutInflater.inflate(LayoutInflater.java:407) 
E/AndroidRuntime(21982): at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
E/AndroidRuntime(21982): at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
E/AndroidRuntime(21982): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207) 
E/AndroidRuntime(21982): at android.app.Activity.setContentView(Activity.java:1629) 
E/AndroidRuntime(21982): at couk.doridori.goigoFull.Board.onCreate(Board.java:31) 
E/AndroidRuntime(21982): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
E/AndroidRuntime(21982): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544) 
E/AndroidRuntime(21982): ... 11 more 
E/AndroidRuntime(21982): Caused by: java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in loader [email protected] 
E/AndroidRuntime(21982): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) 
E/AndroidRuntime(21982): at java.lang.ClassLoader.loadClass(ClassLoader.java:573) 
E/AndroidRuntime(21982): at java.lang.ClassLoader.loadClass(ClassLoader.java:532) 
E/AndroidRuntime(21982): at android.view.LayoutInflater.createView(LayoutInflater.java:466) 
E/AndroidRuntime(21982): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565) 
E/AndroidRuntime(21982): ... 22 more 

EDITAR

Ok, la investigación de algunos de los enlaces que los usuarios han comentado en la respuesta a esta pregunta, parece que el uso de un contexto equivocado para actividades de carga puede causar este problema Me parece interesante esta becuase uno de los dos informes de registro que he sido enviado tiene esta excepción precedido por

W/ActivityManager(1222): startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { flg=0x20000 cmp=couk.doridori.goigoFull/.Games } 

que es bastante explica por sí mismo - problema es que no tengo idea de dónde podría estar siendo inició esta actividad desde donde usa un contexto que no es de actividad, así que estoy un poco perplejo, pensando que podría ser algo multitarea como una rareza y que se lo devuelva al primer plano de algo. Esto aparentemente puede causar problemas con el cargador de clases. Si esto sucediera en un teléfono de un usuario, no puedo ver por qué no puedo reproducir esto (y la mayoría de los otros usuarios tampoco).

La otra cosa que encontré a través de los enlaces que es interesante, es que algunas personas han tenido problemas debido a una "instalación apk incorrecta", que puede resolverse mediante una reinstalación, que he preguntado a los usuarios que tuvieron el problema para probar (que no hace la diferencia). También parece que una vez que se encuentra el problema (que es el primer uso) será persistente.

+0

¿Tiene un receptor de difusión con el filtro de intención Intent.FLAG_ACTIVITY_NEW_TASK? Este podría ser el contexto fuera de la actividad que podría intentar iniciar una de sus actividades. –

Respuesta

32

no puedo dejar de notar que el nombre de la actividad es couk.doridori.goigoFull.Board pero su falta La clase de vista personalizada es couk.doridori.goigo.customUI.GoBoardView ...parece que puede tener dos paquetes diferentes (goigo vs goigoFull).

¿Está usted por casualidad haciendo cosas inteligentes con proyectos de la biblioteca? Deberá tener mucho cuidado con los nombres de clase totalmente calificados en código y en diseño xml ...

(Si no, agregue más información acerca de la configuración de su proyecto y pegue también su diseño XML que el layoutinflater se está ahogando)

+0

ah fantástico, no me había dado cuenta de esto - lo investigaré e informaré pronto, gracias ... – Dori

+1

Sí, este era el problema, lo había pasado por alto ya que tenía un archivo de diseño separado para pantallas pequeñas, en el que tenía Usé no actualizó el nombre del paquete - qué cosa tan estúpida haber hecho :) Aparentemente tengo que esperar 23 horas antes de otorgarle la recompensa, por lo que haré. De nuevo, debería leer la pila más a fondo. – Dori

+0

Hola @Dori, me alegro de haber podido ayudar. Por lo que vale, he cometido errores muy similares antes de ahora. Seguramente sería útil si el compilador de recursos captara referencias a paquetes inexistentes y los elevara como errores ... –

6

Ya estaba discutiendo este problema aquí: Android: Unable to instantiate activity/ClassNotFoundException pero no pudimos encontrar una respuesta definitiva ... Sin embargo, la respuesta de John J Smith sobre el uso correcto de Context es interesante.

Algunas personas también resolvieron su problema en this thread y da algunas ideas.

Espero que esto ayude ...

(Por cierto que estoy feliz de ver a otro programador del juego Go!)

+0

No estoy seguro de si este es el mismo problema ya que esta excepción parece apuntar a una línea específica (14) en uno de los archivos XML. –

+0

Sí, tiene razón, no lo vi ... Sin embargo, hay algunas cosas en común: es la misma excepción, no puede reproducir el error y parece suceder al azar. – Dalmas

+0

Hola, gracias por los enlaces y respuestas. He actualizado mi publicación con más información/pensamientos en la parte inferior. :) – Dori

3

Agregué un diseño personalizado y comencé a ver mensajes de ClassNotFoundException después de solo en el paquete de aplicaciones firmado, pero la compilación de desarrollo funcionaba bien. Estaba usando ProGuard y el nuevo diseño que agregué no estaba incluido en la lista "excluir" en la configuración de ProGuard. Incluí el diseño personalizado en la lista de exclusiones de ProGuard y eso me solucionó el problema.

2

Este problema aparece a veces durante el desarrollo, usualmente después de cambiar los nombres de los paquetes. Una limpieza rápida del proyecto soluciona el problema para mí.

0

esto se debe a la nueva versión de eclipse ... elimina todas las dependencias externas de buildpath y añádela de nuevo usando la pestaña project-> properties-> builspath-> libraries. Ahora vuelva a agregar toda la biblioteca de dependencias y seleccione todos los componentes haciendo clic en ellos en el orden y en la pestaña del proyecto en project-> properties-> builspath-. esto funcionará bien!

1

Hay otra cosa que causa "ClassNotFoundException". Hace algún tiempo, el proyecto de Android comenzó a usar el directorio libs para las dependencias. Si un jar está en el directorio libs, está en el classpath automáticamente, por lo que no tiene que agregarlo en la configuración del proyecto. Sin embargo, los archivos jar en "libs" no pueden tener fuentes adjuntas (lo cual es ridículo). Por lo tanto, si desea adjuntar una fuente, mueva un contenedor de "libs" a "lib" y agréguelo a classpath. Puede adjuntar la fuente. Pero he visto varias veces que esto desencadena ClassNotFoundExceptions en mis clases. Al mover el frasco hacia atrás se resuelve el problema.

1

Tuve el mismo problema. Al final, el problema fue que faltaban tabulaciones en el diseño xml.

Antes:

<org.osmdroid.views.MapView 
    android:id="@+id/mapview" 
    android:layout_width="fill_parent" 
    android:layout_height="0dip" 
    tilesource="MapquestOSM" 
    android:layout_weight="1" 
    /> 

Luego, con la sangría del ClassNotFoundException Nunca apeared de nuevo, y el mapa mostraba correctamente:

<org.osmdroid.views.MapView 
     android:id="@+id/mapview" 
     android:layout_width="fill_parent" 
     android:layout_height="0dip" 
     tilesource="MapquestOSM" 
     android:layout_weight="1" 
    /> 
+7

Quizás necesites reconstruir tu proyecto, apuesto a que la sangría no tiene nada que ver ^^ – thelawnmowerman

1

Mi experiencia puede ser que el SDK de Android se actualiza y el enlace a la la biblioteca de soporte debe actualizarse. Simplemente vaya a la configuración del proyecto> android y señale de nuevo a la biblioteca de soporte.

1

Para mí, el problema fue un pequeño Caps-Fault. Busqué mi código durante horas, donde todo estaba bien. Alguna vez busqué en mis archivos .xml entonces - y ahí estaba:

En los archivos java usé un ViewPager y en una pequeña y desagradable pieza del xml perdí mis tapas y escribí viewPager por error. Obvio, que este no se pudo encontrar ...

Cuestiones relacionadas