2016-05-02 34 views
0

私のアンドロイドアプリでは、AsyncTaskを使用してファイルをバックエンドにアップロードしています。ここでは、私のdoInBackgroundメソッドでMultipartEntityBuilderを使用します。私のdoInBackground部分は次の通りです。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 builder = MultipartEntityBuilder.create(); 
     builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); 

     FileBody fileBody = new FileBody(new File(filePath)); 
     StringBody stringBody = new StringBody("data", ContentType.MULTIPART_FORM_DATA); 

     builder.addPart("file", fileBody); 
     builder.addPart("name", stringBody); 

     httpPost.setEntity(builder.build()); 

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

これは文法上のエラーを表示しません。コードを実行すると例外がスローされ、アプリが停止します。エラーログは以下のようになります。

Process: com.x.x, PID: 6271 
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.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:56) 
at org.apache.http.entity.mime.MultipartEntityBuilder.buildEntity(MultipartEntityBuilder.java:236) 
at org.apache.http.entity.mime.MultipartEntityBuilder.build(MultipartEntityBuilder.java:240) 
at com.x.x.ui.farm_activity.AddCropMonitors$UploadFileTask.doInBackground(AddCropMonitors.java:1905) 
at com.x.x.ui.farm_activity.AddCropMonitors$UploadFileTask.doInBackground(AddCropMonitors.java:1875) 
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) 

それはNoSuchFieldError例外が発生させ告げるが、私はいくつかのチュートリアルを通過し、それがコードは、それらに応じてokです私には思えるのです。エラーが発生する箇所の行番号は、

httpPost.setEntity(builder.build()); 

行を指しています。どのように私はこれを修正することができますか?ありがとうございました!

答えて

1

これはあなたのbuild.gradleファイルで使用しているライブラリのためだと思います。 下記のコードで一度ご確認ください

compile('org.apache.httpcomponents:httpmime:4.3.6') { 
exclude module: 'httpclient' 
} 
compile 'org.apache.httpcomponents:httpclient-android:4.3.5' 
関連する問題