Android - MultipartEntity 和依赖项

Posted

技术标签:

【中文标题】Android - MultipartEntity 和依赖项【英文标题】:Android - MultipartEntity and dependencies 【发布时间】:2015-04-12 18:38:06 【问题描述】:

我最近将我的项目从 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 &gt; httpcomponentsorg.apache.httpcomponents 依赖项之间存在冲突,但我没有找到解决我的问题的解决方案。

【问题讨论】:

【参考方案1】:

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

【讨论】:

@soey 感谢您的回答,它救了我。工作完全正常。【参考方案2】:
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"

【讨论】:

【参考方案3】:
dependencies 
 compile('org.apache.httpcomponents:httpmime:4.3') 
    exclude module: "httpclient"

【讨论】:

【参考方案4】:

Android Studio 解决方案

右键点击左侧的应用文件夹->打开模块设置->依赖->点击'+'->1.库依赖

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

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

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

【讨论】:

以上是关于Android - MultipartEntity 和依赖项的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Android的MultipartEntity将多个图像发送到服务器

The type MultipartEntity is deprecated

MultipartEntity 类型已弃用

如何使用 MultipartEntity 在 servlet 中获取实体?

java 使用MultipartEntity Builder进行图像上传

ANDROID使用MULTIPARTENTITYBUILDER实现类似FORM表单提交方式的文件上传