2015-02-12 12 views
12

Ich habe vor kurzem mein Projekt von Eclipse zu Android Studio migrieren (ich kontrolliere diese IDE noch nicht vollständig). In diesem Projekt habe ich eine Datei-Uploader AsyncTask, die Multipart über http senden. Um dies zu tun, verwende ich org.apache.httpcomponents. Ich habe folgende Abhängigkeiten:Android - MultipartEntity und Abhängigkeiten

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'org.apache.httpcomponents:httpcore:4.4' 
    compile 'org.apache.httpcomponents:httpmime:4.4' 
    ... 
} 

In meinem java AsyncTask Code:

MultipartEntityBuilder builder = MultipartEntityBuilder.create(); 
builder.addBinaryBody(...); 
builder.addBinaryBody(...); 
builder.addBinaryBody(...); 
HttpEntity entity = builder.build(); // < throw exception 

Die Ausnahme, die ich beim Start Upload erhalten:

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) 

Ich glaube, es gibt einen Konflikt zwischen android.jar > httpcomponents und der org.apache.httpcomponents Abhängigkeit, aber ich finde keine Lösung, um mein Problem zu lösen.

Antwort

56

Ich hatte das gleiche Problem - versuchen Sie, den http-Android-Client zu verwenden (dies beruht auch auf der httmime, erfordert aber 4.3). Dieser arbeitete für mich:

dependencies { 
    compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' 
    compile('org.apache.httpcomponents:httpmime:4.3') { 
     exclude module: "httpclient" 
    } 
} 
+0

Das ist mein Problem gelöst, ich danke Ihnen sehr! – alex

+0

@soey Danke für die Antwort, die es mir gerettet hat. Arbeiten völlig in Ordnung. –

8

Lösung für Android Studio

Rechtsklick auf app foleder in links-> Öffnen Moduleinstellungen -> Dependencies-> klicken Sie auf '+' -> 1. Bibliothek Dependencie

jetzt "Choose file Dependencies" wird kommen - geben Sie die Eingabe "httpmime: 4.4" und klicken Sie auf die Schaltfläche "Suchen".

wird die abhängige Datei angezeigt. Wählen Sie diese Datei aus und klicken Sie auf OK.

warten ... es wird das jar hinzufügen und Gradle Skript wird automatisch aktualisiert.

+0

Es funktionierte Eigentum! Vielen Dank. – brunoramonalmeida

0
dependencies { 
compile('org.apache.httpcomponents:httpmime:4.3') { 
    exclude module: "httpclient" 
} 
+3

Pls Beschreibung hier hinzufügen. Ohne nur Code. –

0
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" 
} 
Verwandte Themen