8

我尝试使用 build.gradle 文件在我的应用程序中包含 httpmime,一切都编译得很好。相反,当应用程序尝试实际使用 MultipartEntityBuilder 类时,日志上有一堆 WARN 级别的消息表明存在问题。

这是我的 build.gradle 依赖项的摘录:

    编译('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;

导入 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 {
    私人最终静态字符串边界=“__--__--__SERVETHEOVERMIND-__-_”;

    public void uploadFile(String targetUrl, MultipartEntityBuilder upload, UploadHandler after) {
        Log.v("FileUploader", "上传到" + targetUrl);

        HttpURLConnection con = null;
        输出流 os = null;
        输入流是 = 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(true);
            con.setDoInput(true);
            con.setUseCaches(false);

            con.addRequestProperty("Connection", "Keep-Alive");
            con.setRequestProperty("内容长度", String.valueOf(uploadEntity.getContentLength()));

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

            连接();
            is = con.getInputStream();

            after.consumeUploadResponse(is);
            con.disconnect();
        } 捕捉(IOException e){
            e.printStackTrace();
        }

        如果(con!= null){
            con.disconnect();
        }

        如果(操作系统!= null){
            尝试 {
                os.close();
            } 捕捉(IOException e){
                Log.v("Uploader", "关闭的输出流");
            }
        }

        如果(是!= null){
            尝试 {
                is.close();
            } 捕捉(IOException e){
                Log.v("Uploader", "关闭的输入流");
            }
        }
    }

    公共接口 UploadHandler {
        公共无效消费上传响应(输入流流);
    }
}

[编辑] 正确的依赖关系,根据答案

编译('org.apache.httpcomponents:httpmime:4.+'){
    排除模块:“httpclient”
}
编译('org.apache.httpcomponents:httpcore:4.+'){
    排除模块:“httpclient”
}

[第二次编辑] 仍然有问题 - 现在是这些其他缺失的位,但它可能是后端的问题:

10-10 11:51:54.998 29597-29638/com.company.app W/dalvikvm: VFY: 无法解析 Lorg/apache/http/message/BasicHeaderValueParser 中的静态字段 7465 (INSTANCE);
10-10 11:51:54.998 29597-29638/com.company.app W/dalvikvm: VFY: 无法解析 Lorg/apache/http/message/BasicHeaderValueFormatter 中的静态字段 7459 (INSTANCE);

[另一个编辑]

在这种情况下,最后一点缺失的位似乎对 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 构建路径。我有同样的问题,添加这个罐子后它就消失了。

于 2013-10-10T00:13:21.907 回答
0
 compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'  compile('org.apache.httpcomponents:httpmime:4.3') {
  exclude module: "httpclient"  }

您可以将上述依赖项对您的项目的build.gradle (Module:app) 用于以下 IMPORT 语句

导入 org.apache.http.entity.ContentType;导入 org.apache.http.entity.mime.MIME;

于 2017-09-15T07:03:35.707 回答