J'ai récemment migré mon projet d'Eclipse vers Android Studio (je ne contrôle pas encore totalement ce IDE). Dans ce projet, j'ai un AsyncTask pour le téléchargement de fichiers, qui envoie des messages en plusieurs parties sur http. Pour ce faire, j'utilise org.Apache.httpcomponents. J'ai créé les dépendances suivantes:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'org.Apache.httpcomponents:httpcore:4.4'
compile 'org.Apache.httpcomponents:httpmime:4.4'
...
}
Dans mon code Java AsyncTask:
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addBinaryBody(...);
builder.addBinaryBody(...);
builder.addBinaryBody(...);
HttpEntity entity = builder.build(); // < throw exception
L'exception que j'obtiens au téléchargement de démarrage:
Caused by: Java.lang.NoSuchFieldError: org.Apache.http.message.BasicHeaderValueFormatter.INSTANCE
at org.Apache.http.entity.ContentType.toString(ContentType.Java:153)
at org.Apache.http.entity.mime.MultipartFormEntity.<init>(MultipartFormEntity.Java:52)
at org.Apache.http.entity.mime.MultipartEntityBuilder.buildEntity(MultipartEntityBuilder.Java:226)
at org.Apache.http.entity.mime.MultipartEntityBuilder.build(MultipartEntityBuilder.Java:230)
Je pense qu'il existe un conflit entre Android.jar > httpcomponents
et la dépendance org.Apache.httpcomponents
mais je ne trouve pas de solution pour résoudre mon problème.
J'ai eu le même problème - essayez d'utiliser le client http-Android (cela dépend également de la httmime
mais nécessite 4.3). Cela a fonctionné pour moi:
dependencies {
compile group: 'org.Apache.httpcomponents' , name: 'httpclient-Android' , version: '4.3.5.1'
compile('org.Apache.httpcomponents:httpmime:4.3') {
exclude module: "httpclient"
}
}
Solution pour Android Studio
Faites un clic droit sur le dossier de l'application dans la gauche-> Ouvrir les paramètres du module -> Dépendances-> cliquer sur '+' -> 1. bibliothèque dépendante
maintenant, la boîte "Choisir les dépendances de fichiers" apparaîtra - saisissez "httpmime: 4.4" et cliquez sur le bouton de recherche.
il montrera le fichier de dépendance. Sélectionnez ce fichier et cliquez sur ok.
attendez ... le jar sera ajouté et le script Gradle sera mis à jour automatiquement.
compile group: 'org.Apache.httpcomponents' , name: 'httpclient-Android' , version: '4.3.5.1'
compile('org.Apache.httpcomponents:httpmime:4.3') {
// httpmime:4.2.1' also worked
exclude module: "httpclient"
}
dependencies {
compile('org.Apache.httpcomponents:httpmime:4.3') {
exclude module: "httpclient"
}