Android - MultipartEntity 和依赖项
Android - MultipartEntity and dependencies
我最近将我的项目从 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 > httpcomponents
和 org.apache.httpcomponents
依赖项之间存在冲突,但我没有找到解决我的问题的方法。
我遇到了同样的问题 - 尝试使用 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"
}
}
Android Studio
的解决方案
右键单击左侧的应用程序文件夹->打开模块设置->依赖项->单击“+”->1.库依赖项
现在 "choose file Dependencies" 框会出现 - 提供输入 'httpmime:4.4' 并单击搜索按钮。
它将显示依赖文件。 Select 该文件并单击确定。
等待...它将添加 jar 并且 Gradle 脚本将自动更新。
dependencies {
compile('org.apache.httpcomponents:httpmime:4.3') {
exclude module: "httpclient"
}
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"
}
我最近将我的项目从 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 > httpcomponents
和 org.apache.httpcomponents
依赖项之间存在冲突,但我没有找到解决我的问题的方法。
我遇到了同样的问题 - 尝试使用 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"
}
}
Android Studio
的解决方案右键单击左侧的应用程序文件夹->打开模块设置->依赖项->单击“+”->1.库依赖项
现在 "choose file Dependencies" 框会出现 - 提供输入 'httpmime:4.4' 并单击搜索按钮。
它将显示依赖文件。 Select 该文件并单击确定。
等待...它将添加 jar 并且 Gradle 脚本将自动更新。
dependencies {
compile('org.apache.httpcomponents:httpmime:4.3') {
exclude module: "httpclient"
}
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"
}