Android - MultipartEntity和依赖项

18

我最近将项目从Eclipse迁移到了Android Studio(我还不完全掌握这个IDE)。在这个项目中,我有一个文件上传的AsyncTask,它通过http发送多部分。为此,我使用org.apache.httpcomponents。 我创建了以下依赖项:

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依赖存在冲突,但我找不到解决问题的方法。
4个回答

68

我也遇到了同样的问题 - 尝试使用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"
  }
}

1
@soey 感谢你的回答,它帮了我大忙。现在一切都正常运行。 - user1414160

11

Android Studio的解决方法

在左侧单击app文件夹,右键->打开模块设置->依赖项-> 点击 '+' -> 1.库依赖

现在会出现“选择文件依赖项”框 - 提供输入'httpmime:4.4'并点击搜索按钮。

它将显示依赖文件。选择该文件,然后点击确定。

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


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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接