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 !

0voto

J'ai résolu le même problème comme ceci :

  1. Ouvrez le fichier pom.xml dans le projet où vous rencontrez cette erreur
    java.lang.NoClassDefFoundError: org/apache/http/entity/mime/MultipartEntityBuilder

  2. Sous les dépendances, ajoutez ce morceau de code.

            org.apache.httpcomponents
            httpmime
            4.5.2
            test
  3. Nettoyez et reconstruisez le code.

Ça devrait fonctionner.

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