2012-11-02 66 views
6

我一直在嘗試上傳圖像和數據到Django服務器。我已經包含apache-mime4j.0.6.jarhttpmime4.0.1.jar庫(Project-> build path->添加外部jar文件) 這裏是上傳圖片的代碼。使用MultipartEntity將Android發佈圖像到服務器

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

錯誤消息:

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

而且我手工嘗試創建libs文件夾並手動包括jar文件到/ libs文件夾。 當我這樣做時,它無法編譯。

錯誤:

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

嘗試創建新的應用程序包括圖書館。我遇到了同樣的錯誤。我嘗試了一切可能。誰能告訴我爲什麼會發生這種情況以及如何解決這個問題。任何幫助將不勝感激!!

回答

0

我使用httpmime-4.2.1.jar將圖像從Android上傳到Django服務器。這是我包括的唯一的庫,它工作正常。順便說一句:庫應該在Android項目的libs文件夾中。

這是我用於上傳的代碼。

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

仍然是同樣的錯誤。沒有找到MultipartEntity! – Geetanjali

+0

庫文件夾是否在libs文件夾中?這對於將其正確打包到APK中是必要的。您可以刪除並再次添加一次。將其從文件資源管理器直接拖到eclipse中的文件夾中。然後你應該在「Android Dependencies」下看到它,你可以打開它並查看是否有必要的類。 – SimonSays

+0

請你舉個例子吧?會很有幫助 – Droidman

1

如果您使用的是新的android-sdk試試這個。

  1. 創建命名爲libs
  2. 文件夾文件夾中粘貼您的jar文件。
  3. 最後右鍵單擊您的項目>構建路徑>添加外部存檔。

就是這樣。這可能會有所幫助。好運氣。

+0

是的,我也是這麼做的。我已經提到它 – Geetanjali

+0

你跟着我提到的步驟,因爲那麼它不應該給你類沒有發現error.If你只是通過使用你的方式添加庫不會工作。因爲這是新的SDK的變化。你做的是與以前的SDK是正確的,但新的它不會工作。 :) – Akshay

0

我建議你使用spring-android 這是一個很好的休息api庫和android和spring-android,你可以像這樣輕鬆上傳文件。

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

這是非常容易使用,使用Apache HTTP客戶端預薑餅和java.net.URLConnection中的薑餅和較高的API級別爲谷歌建議。

+0

什麼是RestUtil?甚至在我導入了9個下載的軟件包後,它仍然無法解析..什麼是YourResultDTO? – Droidman

+0

您應該將YourResultDTO替換爲您自己的DTO類。它將成爲保存服務器結果的結果對象,如果您正確設置了spring-android,則spring-android將處理解析json/xml結果。 – kingori

0

我有同樣的問題,我解決這樣說:在Java構建路徑窗口中,單擊排序和導出選項卡中選中要添加,然後單擊向上(上傳LIB是第一)

點擊確定,一切都很好。

這裏是一個鏈接的照片(Android Eclipse NoClassDefFoundError for external .jar files

相關問題