2016-05-02 4 views
0

In meiner Android-App verwende ich AsyncTask, um eine Datei in das Back-End hochzuladen. Dort verwende ich MultipartEntityBuilder in meiner DoInBackground-Methode. Mein DoInBackground Teil ist wie folgt,Datei-Upload mit MultipartEntityBuilder gibt einen Fehler

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

Dies zeigen mir keine Syntaxfehler. aber wenn ich den Code ausführe, löst eine Ausnahme aus und die App stoppt. Das Fehlerprotokoll ist wie folgt.

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) 

es sagt NoSuchFieldError Ausnahme auslöst, aber ich gehe durch einige Tutorials und es scheint mir der Code nach ihnen in Ordnung ist. die Zeilennummer zeigt auf, wo der Fehler auftritt, ist, zeigt auf

Zeile. Also, was ist das Problem mit diesem Codesegment und wie kann ich das beheben? Danke und Grüße!

Antwort

1

Ich denke, das liegt an der Bibliothek, die Sie in Ihrer Build.Gradle-Datei verwenden. Bitte überprüfen Sie mit dem folgenden Code einmal

compile('org.apache.httpcomponents:httpmime:4.3.6') { 
exclude module: 'httpclient' 
} 
compile 'org.apache.httpcomponents:httpclient-android:4.3.5'