Problemy, w tym Apache HttpComponents w projekcie Android Gradle
Próbuję dołączyć httpmime do mojej aplikacji za pomocą pliku build.gradle i wszystko dobrze się kompiluje. Zamiast tego, gdy aplikacja próbuje faktycznie użyć klasy MultipartEntityBuilder, w dzienniku jest kilka komunikatów o poziomie WARN, mówiących o problemach.
Oto fragment mojego build.gradle dla zależności:
compile('org.apache.httpcomponents:httpmime:4.+') { exclude module: "httpclient" }
Oto błędy:
10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to resolve static field 6967 (DEFAULT_BINARY) in Lorg/apache/http/entity/ContentType; 10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;) 10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;) 10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to resolve static field 6967 (DEFAULT_BINARY) in Lorg/apache/http/entity/ContentType; 10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;) 10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;) 10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to resolve static field 6967 (DEFAULT_BINARY) in Lorg/apache/http/entity/ContentType; 10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;) 10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;) 10-09 13:39:37.377 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to resolve static method 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: unable to resolve static field 6968 (DEFAULT_TEXT) in Lorg/apache/http/entity/ContentType; 10-09 13:39:37.377 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;) 10-09 13:39:37.377 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;)
Klasa java:
import android.util.Log; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import org.apache.http.HttpEntity; import org.apache.http.entity.mime.MultipartEntityBuilder; public class FileUploader { private final static String BOUNDARY = "__--__--__SERVETHEOVERMIND-__-_"; public void uploadFile(String targetUrl, MultipartEntityBuilder upload, UploadHandler after) { Log.v("FileUploader", "Uploading to " + targetUrl); HttpURLConnection con = null; OutputStream os = null; InputStream is = null; try { HttpEntity uploadEntity = upload.build(); URL postTo = new 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("Content-length", String.valueOf(uploadEntity.getContentLength())); os = con.getOutputStream(); uploadEntity.writeTo(os); os.close(); con.connect(); is = con.getInputStream(); after.consumeUploadResponse(is); con.disconnect(); } catch (IOException e) { e.printStackTrace(); } if(con != null) { con.disconnect(); } if(os != null) { try { os.close(); } catch (IOException e) { Log.v("Uploader", "Closed output stream"); } } if(is != null) { try { is.close(); } catch (IOException e) { Log.v("Uploader", "Closed input stream"); } } } public interface UploadHandler { public void consumeUploadResponse(InputStream stream); } }
[EDIT] Poprawne zależności, zgodnie z odpowiedzią
compile('org.apache.httpcomponents:httpmime:4.+') { exclude module: "httpclient" } compile('org.apache.httpcomponents:httpcore:4.+') { exclude module: "httpclient" }
[DRUGI EDYCJA] Wciąż masz problemy - teraz są te inne brakujące bity, ale mogą to być problemy na zapleczu:
10-10 11:51:54.998 29597-29638/com.company.app W/dalvikvm﹕ VFY: unable to resolve static field 7465 (INSTANCE) in Lorg/apache/http/message/BasicHeaderValueParser; 10-10 11:51:54.998 29597-29638/com.company.app W/dalvikvm﹕ VFY: unable to resolve static field 7459 (INSTANCE) in Lorg/apache/http/message/BasicHeaderValueFormatter;
[YET ANOTHER EDIT]
Wydaje się, że ostatnie małe brakujące bity nie mają żadnego wpływu na pomyślne użycie MultipartEntityBuilder w tym przypadku.