2015-02-12 16 views
12

Recentemente ho migrato il mio progetto da Eclipse ad Android Studio (non ho ancora controllato completamente questo IDE). In questo progetto, ho un file uploader AsyncTask che invia multipart su http. Per fare ciò, utilizzo org.apache.httpcomponents. Ho creato seguenti dipendenze:Android - MultipartEntity e dipendenze

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

Nel mio codice AsyncTask java:

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

L'eccezione ottengo durante il caricamento all'avvio:

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) 

Penso che ci sia un conflitto tra android.jar > httpcomponents e la dipendenza org.apache.httpcomponents ma non trovo una soluzione per risolvere il mio problema.

risposta

56

Ho avuto lo stesso problema: provare a utilizzare l'http-android-client (anche questo si basa sullo httmime ma richiede 4.3). Questo ha funzionato per me:

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

Questo risolto il problema, vi ringrazio molto! – alex

+0

@soey Grazie per la risposta che mi ha salvato. Lavorare perfettamente. –

8

Soluzione per Studio Android

clic destro su App foleder in mancini> Apri Impostazioni modulo -> Dependencies-> clicca su '+' -> 1. libreria Dependencie

ora verrà visualizzata la finestra "Seleziona file Dipendenze" - fornire l'input "httpmime: 4.4" e fare clic sul pulsante di ricerca.

mostrerà il file dependence. Seleziona quel file e clicca ok.

attendere ... aggiungerà il barattolo e lo script Gradle verrà aggiornato automaticamente.

+0

Ha funzionato la proprietà! Grazie. – brunoramonalmeida

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

Pls aggiungere descrizione qui. Senza solo codice. –

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" 
} 
Problemi correlati