2016-05-02 23 views
0

私のAndroidプロジェクトでは、AsyncTaskを使用してバックエンドにファイルをアップロードする際にMultipartEntityBuilderを使用しています。 AsyncTaskをアップロードする際に私のproject.myのdoInBackgroundメソッドでhttpmime-4.5.2を使用しています。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ライブラリを追加しました。依存関係のbuild.gradleファイルのAndroidスタジオプロジェクトで、次のように表示されます--->コンパイルファイル( 'libs/httpmime-4.5.2.jar') –

答えて

3

最後に私は理由を考え出しました。私はプロジェクトにhttpmimeライブラリをインポートしました。しかし、私の場合、httpmimeと一緒に実行する別のライブラリが必要です。私はhttpcoreライブラリをインポートし、プロジェクトをビルドします。それは問題を解決する。 :D私はbuild.gradleに以下の行を追加し、プロジェクトを再構築します。

compile 'org.apache.httpcomponents:httpcore:4.4.4' 
関連する問題