web-dev-qa-db-ja.com

Android-MultipartEntityと依存関係

最近、プロジェクトを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依存関係の間に矛盾があると思いますが、問題を解決する解決策が見つかりません。

16
alex

同じ問題が発生しました-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"
  }
}
65
soey

Solution for Android Studio

左のアプリフォレダーを右クリックし、[モジュールの設定を開く]-> [依存関係]-> [+]をクリックします-> 1.ライブラリの依存関係

「ファイルの依存関係を選択」ボックスが表示されます-「httpmime:4.4」と入力し、検索ボタンをクリックします。

dependencieファイルが表示されます。そのファイルを選択し、[OK]をクリックします。

お待ちください... jarが追加され、Gradleスクリプトが自動的に更新されます。

10
Nirmal Dhara
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
Manoj Baria
dependencies {
 compile('org.Apache.httpcomponents:httpmime:4.3') {
    exclude module: "httpclient"
}
1
Hemant Bharti