0

I tried to post JSON and image file to server using android.

class TaskUploadPic extends AsyncTask<String, Void, String> {

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

        try {
            MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create();
            multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            multipartEntity.addTextBody("json", strings[0]);
            multipartEntity.addPart("image", new FileBody(file));

            HttpClient httpclient = new DefaultHttpClient();

            httpclient.getConnectionManager().closeExpiredConnections();
            HttpPost httppost = new HttpPost(serverURL);
            httppost.setEntity(multipartEntity.build());

            HttpResponse response = httpclient.execute(httppost);

            return EntityUtils.toString(response.getEntity());
        } catch (IOException ex) {
            Log.wtf("upload", ex.getMessage());
        }

        return "null";
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        text.setText(result);
    }
}

It seems that all is ok, but after executing that AsyncTask, I got error:

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
              Process: ru.kit.automart, PID: 30631
              java.lang.RuntimeException: An error occured while executing doInBackground()
                  at android.os.AsyncTask$3.done(AsyncTask.java:304)
                  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:818)
               Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/entity/ContentType;
                  at org.apache.http.entity.mime.MultipartEntityBuilder.addTextBody(MultipartEntityBuilder.java:158)
                  at ru.kit.automart.UploadPicActivity$TaskUploadPic.doInBackground(UploadPicActivity.java:189)
                  at ru.kit.automart.UploadPicActivity$TaskUploadPic.doInBackground(UploadPicActivity.java:181)
                  at android.os.AsyncTask$2.call(AsyncTask.java:292)
                  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:818) 
               Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.entity.ContentType" on path: DexPathList[[dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-support-annotations-24.1.1_7604d2381e39dd02ef461f537f961dbb4e9625b6-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-internal_impl-24.1.1_6ad3c734c630b0da8f77be30b148d6bf343c3efb-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-httpmime-4.5.2_bf26247ce9bf36f977d3bfba701b9635500c22f3-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-com.github.pinball83-masked-edittext-1.0.3_0e8a6c65b0351a310754f26167cf476680872fd3-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-com.android.support-support-vector-drawable-24.1.1_a5171778b8b856af5acc9b46463816a13d8e94bf-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-com.android.support-support-v4-24.1.1_a349006ec815f9d626f1bdbf50fa1e0dd886c0dc-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-com.android.support-recyclerview-v7-24.1.1_6efa576f7ec7ebc0253c8e8605405e1d336e7cc4-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-com.android.support-design-24.1.1_5d630f1067696b166c4402c2202dd3ac771538b2-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-com.android.support-appcompat-v7-24.1.1_30616bdd58d9fd5e43c2d1a2845438888bdccd13-classes.dex", dex file "/data/data/ru.kit.automart/files/instant-run/dex/slice-com.android.support-animated-vector-drawable-24.1.1_a57732f7c118f52713147bd5067abd84c1b5de5e-classes.dex"],nativeLibraryDirectories=[/data/app/ru.kit.automart-1/lib/arm64, /vendor/lib64, /system/lib64, /vendor/lib64, /system/lib64]]
                  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
                at com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader.findClass(IncrementalClassLoade

What I did wrong? I've read many topics on StackOverflow, but it didn't help me.

dependencies in gradle file:

dependencies {
// ...
    compile 'org.apache.httpcomponents:httpclient:4.5.2'
    compile 'org.apache.httpcomponents:httpmime:4.5.2'
}
  • Looks like it can't find a Java class that it needs `Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.entity.ContentType"` – ryantxr Dec 14 '16 at 14:13

1 Answers1

0

org.apache.http.entity.ContentType is available in httpcore, so you need to include compile 'org.apache.httpcomponents:httpcore:4.4.5':

dependencies {
    // ...
    compile 'org.apache.httpcomponents:httpclient:4.5.2'
    compile 'org.apache.httpcomponents:httpmime:4.5.2'
    compile 'org.apache.httpcomponents:httpcore:4.4.5' // Include this
}
Nico
  • 201
  • 3
  • 11
  • I've already tried this. Error occurs during project building: Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/LICENSE File1: .gradle\caches\modules-2\files-2.1\org.apache.httpcomponents\httpcore\4.4.5\...\httpcore-4.4.5.jar File2: .gradle\caches\modules-2\files-2.1\org.apache.httpcomponents\httpmime\4.5.2\...\httpmime-4.5.2.jar – Anton Baranov Dec 14 '16 at 15:56
  • Have you tried to exclude `'META-INF/LICENSE'` in the `packagingOptions`? (See http://stackoverflow.com/a/34039265/3473158) – Nico Dec 14 '16 at 16:08
  • I added exclude 'META-INF/DEPENDENCIES' also and it works. Thank you! – Anton Baranov Dec 14 '16 at 16:31