2012-11-02 32 views
6

Tôi đã cố tải lên hình ảnh và dữ liệu lên máy chủ Django. Tôi đã bao gồm các thư viện apache-mime4j.0.6.jarhttpmime4.0.1.jar (Dự án-> xây dựng đường dẫn-> Thêm tệp jar bên ngoài) Và đây là mã để tải lên hình ảnh.Hình ảnh bài đăng trên Android lên Máy chủ bằng MultipartEntity

HttpResponse response = null; 
try { 
    HttpPost httppost = new HttpPost("http://10.0.2.2:8000/mobile"); 
    // HttpPost httppost = new HttpPost("some url"); 

    MultipartEntity multipartEntity = new MultipartEntity(); //MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
    multipartEntity.addPart("name", new StringBody("nameText")); 
    multipartEntity.addPart("place", new StringBody("placeText")); 
    multipartEntity.addPart("tag", new StringBody("tagText")); 
    //multipartEntity.addPart("Description", new StringBody(Settings.SHARE.TEXT)); 
    multipartEntity.addPart("Image", new FileBody(destination)); 
    httppost.setEntity(multipartEntity); 

    httpclient.execute(httppost, new PhotoUploadResponseHandler()); 

    } catch (Exception e) { 
    Log.e("Error","error"); 
    } 

Thông báo lỗi:

Could not find class 'org.apache.http.entity.mime.MultipartEntity' 

Và tôi đã thử bằng tay tạo thư mục libs và bằng tay bao gồm các file jar vào thư mục/libs. Khi tôi làm điều đó Nó không biên dịch được.

Lỗi:

Conversion to Dalvik format failed with error 1 Unknown Android Packaging Problem 

Cố gắng tạo ra ứng dụng mới bao gồm các thư viện. Và tôi đã gặp lỗi tương tự. Tôi đã thử mọi thứ có thể. Bất cứ ai có thể cho tôi biết lý do tại sao điều này xảy ra và làm thế nào để sửa chữa nó. Mọi sự trợ giúp sẽ rất được trân trọng!!

Trả lời

0

Tôi tải hình ảnh từ Android lên máy chủ Django bằng cách sử dụng httpmime-4.2.1.jar. Đó là thư viện duy nhất mà tôi đã bao gồm và nó hoạt động tốt. Btw: các thư viện được cho là nằm trong thư mục libs trong các dự án Android.

đây là mã mà tôi đang sử dụng để tải lên.

private JSONObject uploadImage(String url, File img) throws Exception{ 
    url = addAuthToken(url); 
    HttpPost post = new HttpPost(url); 
    MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
    FileBody fileBody = new FileBody(img, "images/jpeg"); 
    reqEntity.addPart("image", fileBody); 
    post.setEntity(reqEntity); 

    JSONObject ret = baseRequest(post); 
    checkReturnStatus(ret, 201); 

    return ret; 
} 

private JSONObject baseRequest(HttpUriRequest request) throws Exception{ 
    HttpClient client = new DefaultHttpClient(); 
    HttpResponse response = client.execute(request); 
    BufferedReader in = null; 
    try{ 
     in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
     StringBuffer sb = new StringBuffer(); 
     String line = null; 
     String NL = System.getProperty("line.separator"); 
     while ((line = in.readLine()) != null) { 
      sb.append(line + NL); 
     } 

     return new JSONObject(sb.toString()); 
    }finally { 
     if(in != null) in.close(); 
    } 
} 
+0

Vẫn cùng một lỗi. Không tìm thấy MultipartEntity! – Geetanjali

+0

Thư viện jar có trong thư mục libs không? Điều này là cần thiết để nó được đóng gói chính xác vào APK. Bạn có thể xóa và thêm một lần nữa. Kéo nó từ một trình thám hiểm tệp trực tiếp vào thư mục trong nhật thực.Sau đó, bạn sẽ thấy nó trong "Phụ thuộc của Android", nơi bạn có thể mở nó và xem liệu lớp được yêu cầu có ở trong đó hay không. – SimonSays

+0

bạn có thể đưa ra ví dụ sử dụng không? ..? Sẽ rất hữu ích – Droidman

1

Nếu bạn đang sử dụng mới android-sdk Hãy thử điều này.

  1. Tạo thư mục có tên như libs
  2. Dán file jar của bạn trong thư mục đó.
  3. Và cuối cùng nhấp chuột phải vào dự án của bạn> Tạo đường dẫn> Thêm lưu trữ bên ngoài.

Điều đó có thể giúp ích. Chúc may mắn.

+0

Vâng tôi đã làm như vậy. Tôi đã đề cập đến nó – Geetanjali

+0

Bạn đã làm theo các bước tôi đề cập bởi vì sau đó nó không nên cung cấp cho bạn lớp không tìm thấy lỗi.Nếu bạn chỉ cần thêm các thư viện bằng cách sử dụng cách bạn đã làm sẽ không làm việc.Bởi vì đây là những thay đổi trong sdk mới.What bạn đã làm là đúng với sdk trước đó nhưng với nó mới sẽ không hoạt động. :) – Akshay

0

Tôi khuyên bạn nên sử dụng spring-android Đây là thư viện api còn lại tốt cho android và với spring-android, bạn có thể tải lên tệp dễ dàng như thế này.

HttpHeaders requestHeaders = .... 
MultiValueMap<String, Object> message = new LinkedMultiValueMap<String, Object>(); 
message.add("qqfile", new FileSystemResource(filePath)); //attach file 

HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(
      message, requestHeaders); 
RestTemplate restTemplate = RestUtil.getRestTemplate(context); 
ResponseEntity<YourResultDTO> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity,YourResultDTO.class); 

Rất dễ sử dụng và sử dụng ứng dụng khách Apache http trên gừng trước và java.net.urlconnection trên bánh gừng và mức api cao hơn như google gợi ý.

+0

RestUtil là gì? Nó không thể được giải quyết ngay cả sau khi tôi đã nhập 9 gói tải xuống .. và YourResultDTO là gì? – Droidman

+0

Bạn nên thay thế YourResultDTO thành lớp DTO của riêng bạn. Nó sẽ là đối tượng kết quả chứa kết quả từ máy chủ và nếu bạn đặt spring-android đúng cách, spring-android sẽ xử lý phân tích cú pháp kết quả json/xml. – kingori

0

tôi đã cùng một vấn đề và tôi giải quyết nó theo cách này: trong cửa sổ con đường java xây dựng, nhấp vào Trình tự, tab Xuất Chọn thư viện mà bạn muốn thêm sau đó nhấp vào (lib upload để là người đầu tiên) lên

Nhấp vào ok và mọi thứ đều ổn.

Đây là liên kết có ảnh (Android Eclipse NoClassDefFoundError for external .jar files)

Các vấn đề liên quan