2016-05-02 17 views
0

在我的Android項目中,我使用MultipartEntityBuilder將文件上傳到後端,使用AsyncTask。我在我的項目中使用httpmime-4.5.2。在上傳AsyncTask的doInBackground方法如下。將文件添加到Android中的MultipartEntityBuilder時出錯

@Override 
protected String doInBackground(String... params) { 

      try { 
       String serverLoaction = params[0]; 
       String filePath = params[1]; 

       HttpClient httpClient = new DefaultHttpClient(); 
       HttpContext localContext = new BasicHttpContext(); 
       HttpPost httpPost = new HttpPost(serverLoaction); 

       MultipartEntityBuilder entity = MultipartEntityBuilder.create(); 
       entity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); 

       FileBody fileBody = new FileBody(new File(filePath)); 
       entity.addPart("file", fileBody); 
       HttpEntity entity_ = entity.build(); 
       httpPost.setEntity(entity_); 

       HttpResponse response = httpClient.execute(httpPost, 
         localContext); 

       BufferedReader reader = new BufferedReader(
         new InputStreamReader(
           response.getEntity().getContent(), "UTF-8")); 

       String sResponse = reader.readLine(); 
       return sResponse; 

      } catch (Exception e) { 
       if (dialog.isShowing()) 
        dialog.dismiss(); 
       Toast.makeText(getApplicationContext(), "Error in downloading image", Toast.LENGTH_LONG).show(); 
       Log.e(e.getClass().getName(), e.getMessage(), e); 
       return null; 
      } 
     } 

但是,當AsyncTask執行時,它會給我下面的錯誤。

java.lang.RuntimeException: An error occured while executing doInBackground() 
at android.os.AsyncTask$3.done(AsyncTask.java:300) 
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
at java.lang.Thread.run(Thread.java:841) 
Caused by: java.lang.NoClassDefFoundError: org.apache.http.entity.ContentType 
at org.apache.http.entity.mime.content.FileBody.<init>(FileBody.java:89) 
at com.marpak.livefarmerpro.ui.farm_activity.AddCropMonitors$UploadFileTask.doInBackground(AddMonitors.java:1912) 
at com.marpak.livefarmerpro.ui.farm_activity.AddCropMonitors$UploadFileTask.doInBackground(AddMonitors.java:1884) 
at android.os.AsyncTask$2.call(AsyncTask.java:288) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)  
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)  
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)  
at java.lang.Thread.run(Thread.java:841) 

所以這個代碼有什麼問題。我怎樣才能解決這個問題。感謝致敬。

+0

引起:java.lang.NoClassDefFoundError。添加庫和清理項目 –

+0

我添加了jar庫。在Android Studio項目中的build.gradle文件的依賴關係中顯示如下--->編譯文件('libs/httpmime-4.5.2.jar') –

回答

3

最後我找出原因。我已經將httpmime庫導入到項目中。但在我的情況下,它需要另一個庫與httpmime一起執行。我導入httpcore庫並構建項目。它解決了這個問題。 :D我只是添加下面的行build.gradle並重新構建項目。

compile 'org.apache.httpcomponents:httpcore:4.4.4' 
相關問題