8

build.gradle ファイルを使用してアプリケーションに httpmime を含めようとすると、すべて正常にコンパイルされます。代わりに、アプリケーションが実際に MultipartEntityBuilder クラスを使用しようとすると、問題があることを示す WARN レベルのメッセージがログに多数記録されます。

依存関係の私の build.gradle からの抜粋は次のとおりです。

    compile('org.apache.httpcomponents:httpmime:4.+') {
        除外モジュール: 「httpclient」
    }

エラーは次のとおりです。

10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: Lorg/apache/http/entity/ContentType の静的フィールド 6967 (DEFAULT_BINARY) を解決できません。
10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: 署名で参照されているクラスが見つかりません (Lorg/apache/http/entity/ContentType;)
10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: 署名で参照されているクラスが見つかりません (Lorg/apache/http/entity/ContentType;)
10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: Lorg/apache/http/entity/ContentType の静的フィールド 6967 (DEFAULT_BINARY) を解決できません。
10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: 署名で参照されているクラスが見つかりません (Lorg/apache/http/entity/ContentType;)
10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: 署名で参照されているクラスが見つかりません (Lorg/apache/http/entity/ContentType;)
10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: Lorg/apache/http/entity/ContentType の静的フィールド 6967 (DEFAULT_BINARY) を解決できません。
10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: 署名で参照されているクラスが見つかりません (Lorg/apache/http/entity/ContentType;)
10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: 署名で参照されているクラスが見つかりません (Lorg/apache/http/entity/ContentType;)
10-09 13:39:37.377 2409-2426/com.company.app W/dalvikvm﹕ VFY: 静的メソッドを解決できません 19478: Lorg/apache/http/util/Args;.notNull (Ljava/lang/Object;Ljava /lang/String;)Ljava/lang/Object;
10-09 13:39:37.377 2409-2426/com.company.app W/dalvikvm﹕ VFY: Lorg/apache/http/entity/ContentType の静的フィールド 6968 (DEFAULT_TEXT) を解決できません。
10-09 13:39:37.377 2409-2426/com.company.app W/dalvikvm﹕ VFY: 署名で参照されているクラスが見つかりません (Lorg/apache/http/entity/ContentType;)
10-09 13:39:37.377 2409-2426/com.company.app W/dalvikvm﹕ VFY: 署名で参照されているクラスが見つかりません (Lorg/apache/http/entity/ContentType;)

Java クラス:

android.util.Log をインポートします。

import java.io.IOException;
java.io.InputStream をインポートします。
java.io.OutputStream をインポートします。
java.net.HttpURLConnection をインポートします。
java.net.URL をインポートします。

org.apache.http.HttpEntity をインポートします。
org.apache.http.entity.mime.MultipartEntityBuilder をインポートします。

公開クラス FileUploader {
    private final static String BOUNDARY = "__--__--__SERVETHEOVERMIND-__-_";

    public void uploadFile(String targetUrl, MultipartEntityBuilder アップロード, UploadHandler after) {
        Log.v("FileUploader", "アップロード中 " + targetUrl);

        HttpURLConnection コン = null;
        OutputStream os = null;
        InputStream は = null;

        試す {
            HttpEntity uploadEntity = upload.build();
            URL postTo = 新しい URL(targetUrl);
            con = (HttpURLConnection) postTo.openConnection();

            con.setRequestMethod("POST");
            con.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + BOUNDARY);
            con.setDoOutput(真);
            con.setDoInput(真);
            con.setUseCaches(false);

            con.addRequestProperty("接続", "キープアライブ");
            con.setRequestProperty("コンテンツの長さ", String.valueOf(uploadEntity.getContentLength()));

            os = con.getOutputStream();
            uploadEntity.writeTo(os);
            os.close();

            con.connect();
            is = con.getInputStream();

            after.consumeUploadResponse(は);
            con.disconnect();
        } キャッチ (IOException e) {
            e.printStackTrace();
        }

        if(con != null) {
            con.disconnect();
        }

        if(os != null) {
            試す {
                os.close();
            } キャッチ (IOException e) {
                Log.v("アップローダー", "クローズド出力ストリーム");
            }
        }

        if(is != null) {
            試す {
                近くにあります();
            } キャッチ (IOException e) {
                Log.v("アップローダー", "クローズド入力ストリーム");
            }
        }
    }

    パブリック インターフェイス UploadHandler {
        public void consumerUploadResponse(InputStream ストリーム);
    }
}

[編集]回答に従って、正しい依存関係

compile('org.apache.httpcomponents:httpmime:4.+') {
    除外モジュール: 「httpclient」
}
compile('org.apache.httpcomponents:httpcore:4.+') {
    除外モジュール: 「httpclient」
}

[2 番目の編集] まだ問題があります - 現在はこれらの他の欠落ビットですが、バックエンドの問題である可能性があります。

10-10 11:51:54.998 29597-29638/com.company.app W/dalvikvm﹕ VFY: Lorg/apache/http/message/BasicHeaderValueParser の静的フィールド 7465 (インスタンス) を解決できません。
10-10 11:51:54.998 29597-29638/com.company.app W/dalvikvm﹕ VFY: Lorg/apache/http/message/BasicHeaderValueFormatter の静的フィールド 7459 (インスタンス) を解決できません。

[まだ別の編集]

この場合、最後の小さな欠落ビットは、MultipartEntityBuilder の正常な使用に影響を与えないようです。

4

3 に答える 3

13

これは私のグラドルで行った方法です..

dependencies { 
compile ('org.apache.httpcomponents:httpmime:4.3'){
    exclude group: 'org.apache.httpcomponents', module: 'httpclient'
}
compile ('org.apache.httpcomponents:httpcore:4.4.1'){
    exclude group: 'org.apache.httpcomponents', module: 'httpclient'

}
}

そしてアンドロイドの内部

android{
packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE'
}
}
于 2015-06-09T07:09:35.870 に答える
8

httpcore-4.3.jar を Java ビルド パスに追加する必要があります。私は同じ問題を抱えていましたが、このjarを追加した後はなくなりました。

于 2013-10-10T00:13:21.907 に答える