2016-09-09 33 views
0

こんにちは私はアンドロイドスタジオを使用し、画像をRoRサーバーにアップロードします。私は座ってJava.lang.NoClassDefFoundError:失敗した解決:Lorg/apache/http/entity/ContentType;

android { 
    compileSdkVersion 23 
    buildToolsVersion "24.0.2" 
    useLibrary 'org.apache.http.legacy' 


    packagingOptions { 
     exclude 'META-INF/DEPENDENCIES' 
    } 

    defaultConfig { 
     applicationId "com.example.myapplicationcamera" 
     minSdkVersion 22 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.4.0' 
    // compile('org.apache.httpcomponents:httpcore:4.3') 
    compile files('libs/commons-io-2.4.jar') 
    compile files('libs/fluent-hc-4.3.1.jar') 
    compile files('libs/httpcore-4.3.jar') 
    compile files('libs/httpmime-4.3.1.jar') 
    compile files('libs/picasso-2.1.1.jar') 
} 

ここ
FATAL EXCEPTION: AsyncTask #1 
Process: com.example.myapplicationcamera, PID: 11616 
java.lang.RuntimeException: An error occurred while executing doInBackground() 
at android.os.AsyncTask$3.done(AsyncTask.java:309) 
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) 
at java.util.concurrent.FutureTask.setException(FutureTask.java:223) 
at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
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.content.FileBody.<init>(FileBody.java:89) 
at com.example.myapplicationcamera.UploadActivity$UploadFileToServer.uploadFile(UploadActivity.java:176) 
at com.example.myapplicationcamera.UploadActivity$UploadFileToServer.doInBackground(UploadActivity.java:153) 
at com.example.myapplicationcamera.UploadActivity$UploadFileToServer.doInBackground(UploadActivity.java:131) 
at android.os.AsyncTask$2.call(AsyncTask.java:295) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
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/com.example.myapplicationcamera/files/instant-run/dex/slice-support-annotations-23.4.0_eb978a40b695cbacc3760b03a82ff4d263be66cd-classes.dex", dex file "/data/data/com.example.myapplicationcamera/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/com.example.myapplicationcamera/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/com.example.myapplicationcamera/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/com.example.myapplicationcamera/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/com.example.myapplicationcamera/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/com.example.myapplicationcamera/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/com.example.myapplicationcamera/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/com.example.myapplicationcamera/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/com.example.myapplicationcamera/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/com.example.myapplicationcamera/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/com.example.myapplicationcamera/files/instant-run/dex/slice-internal_impl-23.4.0_b87f1f72ec1c9dcbc144d1d0504d45070305661a-classes.dex", dex file "/data/data/com.example.myapplicationcamera/files/instant-run/dex/slice-httpmime-4.3.5_e1f92e9669775764ad0bd3fef73fa0c37469b115-classes.dex", dex file "/data/data/com.example.myapplicationcamera/files/instant-run/dex/slice-com.android.support-support-vector-drawable-23.4.0_6c8fdbed5ab41e288837ace225df060c2da9979a-classes.dex", dex file "/data/data/com.example.myapplicationcamera/files/instant-run/dex/slice-com.android.support-support-v4-23.4.0_31bc06bad02045a071c034877ff069663b43a147-classes.dex", dex file "/data/data/com.example.myapplicationcamera/files/instant-run/dex/slice-com.android.support-appcompat-v7-23.4.0_85f3ceda35b43aaa8f8d9ba7878a3e38fde53a74-classes.dex", dex file "/data/data/com.example.myapplicationcamera/files/instant-run/dex/slice-com.android.support-animated-vector-drawable-23.4.0_03c3e23d10520277fe339d24e7aea8b4848d806b-classes.dex"],nativeLibraryDirectories=[/data/app/com.example.myapplicationcamera-1/lib/arm64, /vendor/lib64, /system/lib64]] 
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
at com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader.findClass(IncrementalClassLoader.java:90) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
at java.lang.ClassLoader. 

import android.Manifest; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Color; 
import android.graphics.drawable.ColorDrawable; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v4.app.ActivityCompat; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.ProgressBar; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.VideoView; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.mime.content.FileBody; 
import org.apache.http.entity.mime.content.StringBody; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.util.EntityUtils; 

import org.apache.http.entity.ContentType; 

import java.io.File; 
import java.io.IOException; 

import com.example.myapplicationcamera.AndroidMultiPartEntity.ProgressListener; 

public class UploadActivity extends Activity { 
    // LogCat tag 
    private static final String TAG = MainActivity.class.getSimpleName(); 

    private ProgressBar progressBar; 
    private String filePath = null; 
    private TextView txtPercentage; 
    private ImageView imgPreview; 
    private VideoView vidPreview; 
    private Button btnUpload; 
    long totalSize = 0; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_upload); 
     txtPercentage = (TextView) findViewById(R.id.txtPercentage); 
     btnUpload = (Button) findViewById(R.id.btnUpload); 
     progressBar = (ProgressBar) findViewById(R.id.progressBar); 
     imgPreview = (ImageView) findViewById(R.id.imgPreview); 
     vidPreview = (VideoView) findViewById(R.id.videoPreview); 

     // Changing action bar background color 
    // getActionBar().setBackgroundDrawable(
     //  new ColorDrawable(Color.parseColor(getResources().getString(
      //    R.string.ColorRed)))); 

     // Receiving the data from previous activity 
     Intent i = getIntent(); 

     // image or video path that is captured in previous activity 
     filePath = i.getStringExtra("filePath"); 

     // boolean flag to identify the media type, image or video 
     boolean isImage = i.getBooleanExtra("isImage", true); 

     if (filePath != null) { 
      // Displaying the image or video on the screen 
      previewMedia(isImage); 
     } else { 
      Toast.makeText(getApplicationContext(), 
        "Sorry, file path is missing!", Toast.LENGTH_LONG).show(); 
     } 

     btnUpload.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // uploading the file to server 
       new UploadFileToServer().execute(); 
      } 
     }); 

    } 

    /** 
    * Displaying captured image/video on the screen 
    * */ 
    private void previewMedia(boolean isImage) { 
     // Checking whether captured media is image or video 
     if (isImage) { 
      imgPreview.setVisibility(View.VISIBLE); 
      vidPreview.setVisibility(View.GONE); 
      // bimatp factory 
      BitmapFactory.Options options = new BitmapFactory.Options(); 

      // down sizing image as it throws OutOfMemory Exception for larger 
      // images 
      options.inSampleSize = 8; 


      final Bitmap bitmap = BitmapFactory.decodeFile(filePath, options); 

      imgPreview.setImageBitmap(bitmap); 
     } else { 
      imgPreview.setVisibility(View.GONE); 
      vidPreview.setVisibility(View.VISIBLE); 
      vidPreview.setVideoPath(filePath); 
      // start playing 
      vidPreview.start(); 
     } 
    } 

    /** 
    * Uploading the file to server 
    * */ 
    private class UploadFileToServer extends AsyncTask<Void, Integer, String> { 
     @Override 
     protected void onPreExecute() { 
      // setting progress bar to zero 
      progressBar.setProgress(0); 
      super.onPreExecute(); 
     } 

     @Override 
     protected void onProgressUpdate(Integer... progress) { 
      // Making progress bar visible 
      progressBar.setVisibility(View.VISIBLE); 

      // updating progress bar value 
      progressBar.setProgress(progress[0]); 

      // updating percentage value 
      txtPercentage.setText(String.valueOf(progress[0]) + "%"); 
     } 

     @Override 
     protected String doInBackground(Void... params) { 
      return uploadFile(); 
     } 

     @SuppressWarnings("deprecation") 
     private String uploadFile() { 
      String responseString = null; 

      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(Config.FILE_UPLOAD_URL); 

      try { 
       AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
         new ProgressListener() { 

          @Override 
          public void transferred(long num) { 
           publishProgress((int) ((num/(float) totalSize) * 100)); 
          } 
         }); 

       File sourceFile = new File(filePath); 

       // Adding file data to http body 
       entity.addPart("image", new FileBody(sourceFile)); 

       // Extra parameters if you want to pass to server 
       entity.addPart("website", 
         new StringBody("www.androidhive.info")); 
       entity.addPart("email", new StringBody("[email protected]")); 

       totalSize = entity.getContentLength(); 
       httppost.setEntity(entity); 

       // Making server call 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity r_entity = response.getEntity(); 

       int statusCode = response.getStatusLine().getStatusCode(); 
       if (statusCode == 200) { 
        // Server response 
        responseString = EntityUtils.toString(r_entity); 
       } else { 
        responseString = "Error occurred! Http Status Code: " 
          + statusCode; 
       } 

      } catch (ClientProtocolException e) { 
       responseString = e.toString(); 
      } catch (IOException e) { 
       responseString = e.toString(); 
      } 

      return responseString; 

     } 

     @Override 
     protected void onPostExecute(String result) { 
      Log.e(TAG, "Response from server: " + result); 

      // showing the server response in an alert dialog 
      showAlert(result); 

      super.onPostExecute(result); 
     } 

    } 

    /** 
    * Method to show alert dialog 
    * */ 
    private void showAlert(String message) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage(message).setTitle("Response from Servers") 
       .setCancelable(false) 
       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         // do nothing 
        } 
       }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
    } 


} 

そして、ここでは私のGradle輸入している私の活動のコードです:私は、アップロード・ボタンを押すと、しかし、私はこのエラーを取得しますインターネット上での解決策はありません。誰かにアイデアはありますか?

+0

Androidの一部である旧式のApache HttpClient以外のものを使用することを強くお勧めします。 OkHttpや 'HttpUrlConnection'やVolley、Apache HttpClientやIonなどの別のコピーを使用してください。 – CommonsWare

+0

ありがとう、それはいい考えです。どのように私はOKHttpにコードを変更することができますか? – Peter

答えて

3

これは実際には例外として、クラスローダーはクラスを検出していません。私はいくつかのことを提案することができます:

  1. 閉じるプロジェクトを閉じてスタジオを開いてもう一度やり直してください。

  2. あなたのアンドロイドインストールで実際にorg/apacheなどがあるかどうかを確認してください。 jarファイルがある場合は、jar tvf whatever.jarを使用してコンテンツをリストできます。長いリストになるので、jar tvf whatever.jar | grep apache

+0

プロジェクトを閉じ、スタジオを閉じて開いて、もう一度お試しください。これはうまくいった。なぜ私は知りませんが、それが解決策でした。ありがとうございました! – Peter

+0

@Peterうまくいきました。答えを受け入れてください。 –

+0

私はstacoverflowsに新しいです、答えを受け入れることを知らなかった。ご協力いただきありがとうございます! – Peter

関連する問題