18 votes

NoClassDefFondError en Android... mais la classe est dans un jar inclus dans le Classpath

Je suis en train de développer une application Android. Elle doit être capable de prendre une photo et de l'envoyer à une page web. Voici le code :

HttpClient httpclient = new DefaultHttpClient();

        HttpPost httpPost = new HttpPost("someurl");
        MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); //Ici lance l'exception
        multipartEntity.addPart("data",
                new InputStreamBody(
                        new ByteArrayInputStream(byteArray),
                        "image/png"));
        multipartEntity.addPart("caption", new StringBody(filename));

        httpPost.setEntity((HttpEntity) multipartEntity);

J'ai les bibliothèques nécessaires dans mon ClassPath (httpclient, apache-mime4j-core, httpcore et httpmime). Il n'y a pas d'erreur lors de la compilation. Mais quand je lance le projet, il affiche "java.lang.NoClassDefFoundError : org.apache.http.entity.mime.MultipartEntity" alors que cette classe EXISTE dans les jars (dans httpMime, exactement). Voici la trace complète :

04-09 10:21:59.362: E/AndroidRuntime(10352): FATAL EXCEPTION: main
04-09 10:21:59.362: E/AndroidRuntime(10352): java.lang.NoClassDefFoundError: org.apache.http.entity.mime.MultipartEntity
04-09 10:21:59.362: E/AndroidRuntime(10352):    at com.publidirecta.AppAzafata.IniciarGPSActivity2.enviarImagen(IniciarGPSActivity2.java:206)
04-09 10:21:59.362: E/AndroidRuntime(10352):    at com.publidirecta.AppAzafata.IniciarGPSActivity2.onActivityResult(IniciarGPSActivity2.java:196)
04-09 10:21:59.362: E/AndroidRuntime(10352):    at android.app.Activity.dispatchActivityResult(Activity.java:3908)
04-09 10:21:59.362: E/AndroidRuntime(10352):    at android.app.ActivityThread.deliverResults(ActivityThread.java:2549)
04-09 10:21:59.362: E/AndroidRuntime(10352):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:2595)
04-09 10:21:59.362: E/AndroidRuntime(10352):    at android.app.ActivityThread.access$2000(ActivityThread.java:121)
04-09 10:21:59.362: E/AndroidRuntime(10352):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:973)
04-09 10:21:59.362: E/AndroidRuntime(10352):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-09 10:21:59.362: E/AndroidRuntime(10352):    at android.os.Looper.loop(Looper.java:130)
04-09 10:21:59.362: E/AndroidRuntime(10352):    at  android.app.ActivityThread.main(ActivityThread.java:3701)
04-09 10:21:59.362: E/AndroidRuntime(10352):    at java.lang.reflect.Method.invokeNative(Native Method)
04-09 10:21:59.362: E/AndroidRuntime(10352):    at java.lang.reflect.Method.invoke(Method.java:507)
04-09 10:21:59.362: E/AndroidRuntime(10352):    at     com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
04-09 10:21:59.362: E/AndroidRuntime(10352):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
04-09 10:21:59.362: E/AndroidRuntime(10352):    at dalvik.system.NativeStart.main(Native Method)

J'ai essayé avec des versions antérieures de tous les jars utilisés pour cette tâche, mais cela ne fonctionne toujours pas. Ces jars apparaissent dans les "Bibliothèques référencées" du projet Android.

J'ai tout essayé. Quelqu'un a une idée de pourquoi cela se produit ? Je suis sur le point de me jeter par la fenêtre.

Merci d'avance !

29voto

idiottiger Points 3398

Vous devez créer un dossier nommé libs dans votre projet et copier les fichiers jars que vous avez référencés dans ce dossier.

9voto

MutantJedi Points 248

Étant donné que la mise à jour automatique n'a pas fonctionné, j'ai téléchargé la dernière version. Cependant, la classe MultipartEntity n'a pas pu être trouvée. Je l'ai réajoutée au projet. J'ai vérifié qu'elle se trouvait dans un dossier appelé 'libs' - mais sans succès. Andong m'a conseillé de vérifier les préférences du projet. Propriétés du projet -> Chemin de construction Java -> Ordre et Exportation : assurez-vous que les Bibliothèques Privées Android sont cochées. (Je les ai toutes cochées). Nettoyez votre projet. Le problème est résolu.

3voto

JaboJG Points 87

Si bizarre, mon application avait déjà les fichiers dans "lib" et j'ai eu ce crash. Je l'ai renommé "libs" en suivant la réponse de idiottiger et ça a fonctionné.

3voto

Andong Points 76

Ouvrez les Propriétés de votre projet dans Eclipse. Et ouvrez Commande et Exportation, assurez-vous que toutes les bibliothèques dont vous avez besoin sont sélectionnées. Et cliquez sur Projet>Nettoyer. Enfin, votre problème devrait disparaître.

2voto

azwethinkweiz Points 26

J'ai eu quelques problèmes avec cela aujourd'hui :

a) J'avais tous les fichiers jar dans le répertoire libs et j'ai fait un clic droit sur Projet > Chemin de construction > Ajouter des jars externes > sélectionné les fichiers jar. Ensuite suis allé dans "ordre et exportation", j'avais toujours le problème. b) Il s'est avéré que httpclient-4.3.1.jar et httpmime-4.3.1.jar ne suffisaient pas. J'ai également eu besoin d'ajouter httpcore-4.3.jar.

Cela a résolu l'erreur ! :D J'ai passé près de 4 heures aujourd'hui à essayer de résoudre cela :(

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X