获取NoSuchFieldError INSTANCE org / apache / http / message / BasicHeaderValueParser

时间:2014-12-08 20:35:47

标签: android apache-httpclient-4.x androidhttpclient

我正在使用Android上的应用。我正在使用httpcore 4.3.3。当我尝试使用ContentType.parse(string)

时,我得到了这个
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)

我做了一些谷歌搜索,我理解为什么我收到错误,但我不确定如何解决它。从我读过的内容来看,似乎ContentType试图利用Android附带的BasicHeaderValueParser,而该类还没有INSTANCE字段。有什么帮助吗?

这些是相关的进口商品:

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

5 个答案:

答案 0 :(得分:89)

不幸的是,HttpCore的库存版本无法在Android中使用。请使用Apache HttpClient Android Port,其中还包括必备的HttpCore类

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

答案 1 :(得分:1)

看起来你为httpmime和httpclient-android使用了不兼容的jar。尝试使用httpmime的4.3.6版本

答案 2 :(得分:0)

简单的解决方案是使用:

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

这是用于Android包装的Appache HttpClient端口,使用不同的包名,这样就不会干扰Android中的现有版本。 在Android项目中导入jar而不是“org.apache.http”使用“ch.boye.httpclientandroidlib”。

答案 3 :(得分:0)

只需在lib文件夹中添加版本4.3.6文件的httpmime_4.3.6.jar并添加

gradle(应用程序级别)中的实现文件('lib / httpmime-4.3.6.jar')

答案 4 :(得分:-1)

注意:如果同时使用apache httpmime和改造 使用apache httpmime旧版本。

  

(例如:在我的情况下,我使用它在服务器上上传图片,也   获取内容的长度/图像大小)

这是一个较旧的版本(不是那么旧)或上一个版本,您应该为这两个实现相同的旧版本。

  

实现'com.squareup.retrofit2:retrofit:2.0.2'      实现'org.apache.httpcomponents:httpmime:4.3.6'

这是他的新版本,您应该使用旧版本的Apache httpmime。

  

实现'com.squareup.retrofit2:retrofit:2.3.0'       实现'org.apache.httpcomponents:httpmime:4.3.6'

非常感谢您,如果您喜欢我的解决方案,请投票给我。