最近、プロジェクトを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"
}
}
Solution for Android Studio
左のアプリフォレダーを右クリックし、[モジュールの設定を開く]-> [依存関係]-> [+]をクリックします-> 1.ライブラリの依存関係
「ファイルの依存関係を選択」ボックスが表示されます-「httpmime:4.4」と入力し、検索ボタンをクリックします。
dependencieファイルが表示されます。そのファイルを選択し、[OK]をクリックします。
お待ちください... jarが追加され、Gradleスクリプトが自動的に更新されます。
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"
}
dependencies {
compile('org.Apache.httpcomponents:httpmime:4.3') {
exclude module: "httpclient"
}