2010-06-22 24 views
6

Así que me encontré con un problema hoy en día mientras trabajaba en mi programa Android. Tengo una clase que resulta que una cadena XML en un objeto de Java (tercero) y funciona bien en como un proyecto java normal, pero en Android recibí este extraño error:ClassNotFoundException Android

 
06-21 22:44:26.402: DEBUG/App(259): java.lang.ClassNotFoundException: com.package.mycode.Class in loader [email protected] 
06-21 22:44:26.402: DEBUG/App(259):  at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) 

oculto mi nombre de aplicación y mi paquete por razones obvias, pero me preguntaba si alguien ha tenido problemas como este. La clase está en el paquete correcto, que es una biblioteca que he agregado. Otras clases a las que hago referencia anteriormente están ahí y se pueden hacer. ¿Hay alguna otra razón por la cual se arroja un ClassNotFoundException?

Gracias, Jake

+0

No sé lo que eso significa> _ < – jakehschwartz

Respuesta

9
private static void fixClassLoaderIssue() 
{ 
    ClassLoader myClassLoader = MyClass.class.getClassLoader(); 
    Thread.currentThread().setContextClassLoader(myClassLoader); 
} 

Este es el código que tengo actualmente que creo que solucionó este problema. MyClass es solo una clase que tengo en mi proyecto. Como dije, un compañero de trabajo me lo mostró, pero parece bastante sencillo.

+0

gracias por compartir eso. –

+0

¿De dónde se llama esto? – jjnguy

+0

Lo llamo en el constructor predeterminado de mi clase de aplicación. – jakehschwartz

0

Are there any other reasons a ClassNotFoundException is thrown?

IIRC, sino que también pueden ser lanzados si alguna otra clase en las dependencias estáticas de "com.package.mycode.Class" no se puede cargar, o si hay un problema durante la inicialización estática. Pero estos deberían aparecer como una excepción anidada ... la primera vez que intenta cargar la clase.

0

Android no tiene todas las clases de Java disponibles que están disponibles en una máquina normal. Faltan algunas clases que podrían causar este error. Pero esto ya debería mostrarse en tiempo de compilación. Mira esto list para ver qué clases son compatibles y cuáles no son compatibles.

De nuevo, solo estoy adivinando porque el compilador debería ver las clases faltantes.

+0

No tengo ninguna otra clase que se importe o dependa que no sea compatible. Y el archivo que está intentando cargar es parte de un archivo jar que creé para que compilara bien con los otros archivos jar. Espero que tenga lo que quería decir – jakehschwartz

+0

¿Dónde ha puesto este archivo jar en su proyecto de Android? – Janusz

0

Para una aplicación de Android, tendría el mismo problema con un archivo jar externo. En mi caso, la solución fue mover el contenedor de la carpeta "lib" a la carpeta "libs" predeterminada de Android.

Cuando el archivo jar estaba en la carpeta lib (se agregó también a la ruta de compilación), mientras que no había ningún problema de compilación en Eclipse, la aplicación daba ClassNotFoundException en tiempo de ejecución. Una vez que moví el contenedor a la carpeta "libs", el contenedor comenzó a aparecer en "Dependencias de Android" y la aplicación comenzó a funcionar bien.

Estas son algunas de las otras discusiones sobre el mismo tema.

Adding a library/JAR to an Eclipse Android project

Android: What is the folder name of the jar files (LIB or LIBS)?

How to specify lib folder for JARs when using Android-generated ant build file?

0

que tenía un problema de comenzar un aynctask. solía funcionar muy bien, pero entonces añadí

line = StringEscapeUtils.unescapeHtml4(line); 

(su biblioteca commons.apache.org) a la AsyncTask luego un montón de problemas. Compila bien, pero cuando traté de ejecutar, dijo que la clase no se encontraba en mi clase asynctask. pero toco reanudar que siguió en la tarea asincrónica, luego murió.

así que supongo que el problema es que StringEscapeUtils no está instalado correctamente, pero no tenía forma de averiguarlo a partir de los mensajes de error que recibía.

0

Are there any other reasons a ClassNotFoundException is thrown?

En mi caso, tengo una ClassNotFoundException para mi actividad principal en la construcción de la apk con Eclipse, pero no tienen ningún problema cuando se construye con Maven.

El problema era que mi actividad principal era implementar una interfaz de un proyecto Java simple "biblioteca POJO". En el proyecto de Android> Propiedades> Ruta de compilación de Java> Ordenar y exportar, tuve que marcar la casilla para exportar la "Biblioteca POJO". Después de limpiar el proyecto, la interfaz se incluyó en classes.x en el apk y se solucionó el problema.

Me dirigieron aquí cuando trato de entender el problema, y ​​espero que ayude a alguien más en la misma situación.

Cuestiones relacionadas