2016-12-14 3 views
0

アンドロイドを使用してJSONと画像ファイルをサーバーに投稿しようとしました。POST json and image to serverアンドロイド

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

すべてがOKですが、AsyncTaskが、私はエラーを得たことを実行した後ようだ:

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 

私が間違っていましたか? 私はStackOverflowに関する多くの話題を読んだことがありますが、それは私を助けませんでした。

のGradleファイルに依存関係:

dependencies { 
// ... 
    compile 'org.apache.httpcomponents:httpclient:4.5.2' 
    compile 'org.apache.httpcomponents:httpmime:4.5.2' 
} 
+0

が見えますby:java.lang.ClassNotFoundException:クラス "org.apache.http.entity.ContentType"が見つかりませんでした。 – ryantxr

答えて

0

org.apache.http.entity.ContentTypeあなたがcompile 'org.apache.httpcomponents:httpcore:4.4.5'を含める必要があるので、httpcoreで提供されています:それはそれは `起因する必要があるとJavaクラスを見つけることができないよう

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 
} 
+0

私はすでにこれを試しました。プロジェクトのビルド中にエラーが発生しました: エラー:タスク ':app:transformResourcesWithMergeJavaResForDebug'の実行に失敗しました。 > com.android.build.api.transform.TransformException:com.android.builder.packaging.DuplicateFileException:APK META-INF/LICENSEでコピーされた重複ファイル \t File1:.gradle \ caches \ modules-2 \ files-2.1 \ org.apache.httpcomponents \ httpcore \ 4.4.5 \ ... \ httpcore-4.4.5.jar \t File2:.gradle \ caches \ modules-2 \ files-2.1 \ org.apache.httpcomponents \ httpmime \ 4.5 .2 \ ... \ httpmime-4.5.2.jar –

+0

'' META-INF/LICENSE''を 'packagingOptions'で除外しようとしましたか? (http://stackoverflow.com/a/34039265/3473158を参照してください) – Nico

+0

「META-INF/DEPENDENCIES」も除外して追加しました。ありがとうございました! –