2015-02-12 30 views
12

Gần đây tôi di chuyển dự án của tôi từ Eclipse sang Android Studio (Tôi chưa hoàn toàn kiểm soát được IDE này). Trong dự án này, tôi có một trình tải lên tệp AsyncTask gửi nhiều phần trên http. Để làm điều này, tôi sử dụng org.apache.httpcomponents. Tôi tạo ra phụ thuộc sau:Android - MultipartEntity và phụ thuộc

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'org.apache.httpcomponents:httpcore:4.4' 
    compile 'org.apache.httpcomponents:httpmime:4.4' 
    ... 
} 

Trong mã AsyncTask java của tôi:

MultipartEntityBuilder builder = MultipartEntityBuilder.create(); 
builder.addBinaryBody(...); 
builder.addBinaryBody(...); 
builder.addBinaryBody(...); 
HttpEntity entity = builder.build(); // < throw exception 

Ngoại lệ tôi có được lúc khởi động tải lên:

Caused by: java.lang.NoSuchFieldError: org.apache.http.message.BasicHeaderValueFormatter.INSTANCE 
    at org.apache.http.entity.ContentType.toString(ContentType.java:153) 
    at org.apache.http.entity.mime.MultipartFormEntity.<init>(MultipartFormEntity.java:52) 
    at org.apache.http.entity.mime.MultipartEntityBuilder.buildEntity(MultipartEntityBuilder.java:226) 
    at org.apache.http.entity.mime.MultipartEntityBuilder.build(MultipartEntityBuilder.java:230) 

Tôi nghĩ rằng có một xung đột giữa android.jar > httpcomponents và phụ thuộc org.apache.httpcomponents nhưng tôi không tìm thấy giải pháp để giải quyết vấn đề của mình.

Trả lời

56

Tôi gặp vấn đề tương tự - hãy thử sử dụng http-android-client (điều này cũng dựa trên số httmime nhưng yêu cầu 4.3). Điều này làm việc cho tôi:

dependencies { 
    compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' 
    compile('org.apache.httpcomponents:httpmime:4.3') { 
     exclude module: "httpclient" 
    } 
} 
+0

này giải quyết vấn đề của tôi, cảm ơn bạn rất nhiều! – alex

+0

@soey Cảm ơn câu trả lời đã lưu cho tôi.Working hoàn toàn ổn. –

8

Giải pháp dành cho Android Studio

Nhấp chuột phải vào ứng dụng foleder trong trái> Mở Cài đặt Module -> Dependencies-> nhấp vào '+' -> 1. Thư viện Dependencie

bây giờ hộp "chọn tệp phụ thuộc" sẽ đến - cung cấp đầu vào 'httpmime: 4.4' và nhấp vào nút tìm kiếm.

nó sẽ hiển thị tệp dependencie. Chọn tập tin đó và nhấn OK.

chờ ... nó sẽ thêm bình và tập lệnh Gradle sẽ được cập nhật tự động.

+0

Tài sản đã hoạt động! Cảm ơn. – brunoramonalmeida

0
dependencies { 
compile('org.apache.httpcomponents:httpmime:4.3') { 
    exclude module: "httpclient" 
} 
+3

Xin vui lòng thêm mô tả ở đây. Không chỉ mã. –

0
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' 
compile('org.apache.httpcomponents:httpmime:4.3') { 
    // httpmime:4.2.1' also worked 
    exclude module: "httpclient" 
} 
Các vấn đề liên quan