我尝试使用 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 的成功使用没有任何影响。