8

Я пытаюсь включить httpmime в свое приложение, используя файл build.gradle, и все компилируется в порядке. Вместо этого, когда приложение пытается использовать класс MultipartEntityBuilder, в журнале есть куча сообщений уровня WARN, в которых говорится о проблемах.Проблемы, включая Apache HttpComponents в Android Gradle project

Вот отрывок из моего build.gradle на зависимость:

 
    compile('org.apache.httpcomponents:httpmime:4.+') { 
     exclude module: "httpclient" 
    } 

Вот ошибки:

 
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;) 

Класс 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] Правильные зависимости, согласно ответам

 
compile('org.apache.httpcomponents:httpmime:4.+') { 
    exclude module: "httpclient" 
} 
compile('org.apache.httpcomponents:httpcore:4.+') { 
    exclude module: "httpclient" 
} 

[ВТОРОЙ EDIT] По-прежнему возникают проблемы - теперь именно эти другие недостающие биты, но могут быть проблемы на внутреннем интерфейсе:

 
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; 

[ОЧЕРЕДНОЙ EDIT]

Кажется, последние недостающие биты не влияют на успешное использование MultipartEntityBuilder в этом случае.

+0

Удалось ли удалить сообщение Lorg/apache/http/message .... предупреждения о статическом поле? Кажется, у меня такая же проблема. –

+0

Ваш первый блок кода выше установленного предупреждения, которое я получал в студии Android. Благодаря! – Josh

ответ

8

Вам нужно добавить httpcore-4.3.jar в свой путь сборки java. У меня была такая же проблема, и после добавления этой банки она исчезла.

+0

Я думал, что это так, но я все еще придерживаюсь подобных проблем. –

+0

Похоже, что он, вероятно, работает, несмотря на последние сообщения об ошибках - теперь я смотрю на проблемы с рельсами backend –

+0

Если вы новичок в Android Studio и теперь, как добавить банку в свой путь сборки, см. этот ответ на аналогичный вопрос: http://stackoverflow.com/a/28712564 - вам просто нужно искать из 'httpcore' вместо' httpmime'. –

13

Это, как я сделал в моей Gradle ..

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' 
} 
} 
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 (модуль: приложение) к вашему проекту для следующих заявлений IMPORT

import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.MIME;

Смежные вопросы