我正在使用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'
答案 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'
非常感谢您,如果您喜欢我的解决方案,请投票给我。