2015-02-12 169 views
12

我最近将我的项目从Eclipse迁移到Android Studio(我还没完全控制这个IDE)。在这个项目中,我有一个通过http发送multipart的文件上传器AsyncTask。为此,我使用org.apache.httpcomponents。我创建了以下的依赖:Android - MultipartEntity和依赖关系

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

在我的Java代码的AsyncTask:

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

我在启动上传得异常:

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) 

我认为android.jar > httpcomponentsorg.apache.httpcomponents依赖项之间有冲突,但我找不到解决方案来解决我的问题。

回答

56

我有同样的问题 - 尝试使用http-android-client(这也取决于httmime但需要4.3)。这为我工作:

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

这解决了我的问题,非常感谢你! – alex 2015-02-12 12:41:48

+0

@soey谢谢你的答案,它拯救了我。工作完全正常。 – 2015-08-06 13:32:43

8

在左>打开模块设置方案为Android工作室

右键点击应用foleder - > Dependencies->点击 '+' - > 1.库Dependencie

现在“选择文件依赖关系”框将提供输入'httpmime:4.4'并单击搜索按钮。

它会显示依赖文件。选择该文件并单击确定。

等待...它会添加jar和Gradle脚本会自动更新。

+0

它工作的财产!谢谢。 – brunoramonalmeida 2016-10-23 14:40:57

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

请在这里添加说明。没有代码。 – 2016-11-10 09:02:22

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