web-dev-qa-db-fra.com

Android - MultipartEntity et dépendances

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.

14
alex

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"
  }
}
63
soey

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.

10
Nirmal Dhara
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"
}
1
Manoj Baria
dependencies {
 compile('org.Apache.httpcomponents:httpmime:4.3') {
    exclude module: "httpclient"
}
1
Hemant Bharti