2014-12-08 10 views
23

Sto lavorando su un'app su Android. Sto usando httpcore 4.3.3. Ottengo questo quando provo ad usare ContentType.parse(string)Ottenere NoSuchFieldError INSTANCE org/apache/http/message/BasicHeaderValueParser

java.lang.NoSuchFieldError: No static field INSTANCE of type Lorg/apache/http/message/BasicHeaderValueParser; in class Lorg/apache/http/message/BasicHeaderValueParser; or its superclasses (declaration of 'org.apache.http.message.BasicHeaderValueParser' appears in /system/framework/ext.jar) 

Ho fatto qualche googling e capisco perché sto ottenendo l'errore, ma io sono sicuro come risolvere il problema. Da quello che ho letto, sembra che ContentType cerchi di utilizzare BasicHeaderValueParser fornito con Android e quella classe non ha ancora il campo INSTANCE. Qualche aiuto per favore?

Queste sono le importazioni rilevanti:

compile('org.apache.httpcomponents:httpmime:4.3.6') { 
    exclude module: 'httpclient' 
} 
compile 'org.apache.httpcomponents:httpcore:4.3.3' 
+0

Stai usando Proguard? – Emmanuel

+0

non penso. ho recentemente aggiornato ad Android Studio 1.0 che ti fa usare minifyEnabled invece di runProguard, penso di averli impostati su false. Posso provare a impostarli su true, ma c'è un altro modo per risolvere questo problema? -> non sembra aggiustarlo – Josh

+0

usa jarjar per riconfezionare la libreria http di apache o usa la vecchia libreria httpmime (chech che verion è compatibile con minsdk del tuo progetto) – Selvin

risposta

71

Purtroppo versioni di magazzino dei HttpCore non possono essere utilizzati in Android. Si prega di utilizzare Apache HttpClient Android Port che comprende anche corsi di requisito HttpCore

compile('org.apache.httpcomponents:httpmime:4.3.6') { 
    exclude module: 'httpclient' 
} 
compile 'org.apache.httpcomponents:httpclient-android:4.3.5' 
+8

se potessi darti più di un upvote – Alex

+1

stavo provando questo approccio con httpmim: 4.5 e non funzionava, ma con 4.3.6 (http://stackoverflow.com/a/29473284/1423773) non dimenticarlo anche questo. – GuilhE

+0

cosa sono richieste tutte le altre librerie ?? perché sto ricevendo errore - Errore ': (76, 64) errore: impossibile accedere al file di classe HttpEntity per org.apache.http.HttpEntity non trovato' Ho usato le stesse librerie menzionate nella risposta. Inoltre sono stato reindirizzato da - [collegamento] http://stackoverflow.com/questions/32796770/upload-image-via-volley-throwing-error [/ link] –

0

soluzione semplice è quella di utilizzare:

https://code.google.com/p/httpclientandroidlib/

E 'il HttpClient porto Appache per avvolgere Android in un nome di un pacchetto diverso in modo che non interferisca con la versione esistente in Android. Importare il jar nel progetto Android e invece di "org.apache.http" utilizzare "ch.boye.httpclientandroidlib."

2

Scarica l'ultimo file jar Apache Httpclient e il nome del percorso di rifrazione. Per me va bene.

0

Sembra che tu usi jar incompatibili per httpmime e httpclient-android. Prova ad usare la versione 4.3.6 di httpmime