title: Getting FATAL exception: AsyncTask #1 on using Async class
body: <p>I'm new in android. I have imported a project which takes picture from my mobile and is supposed to upload it on my localhost in my laptop. Both are connected to same WiFi and it runs until I take picture and click upload but as i click upload, it crashes. These are the errors I am getting in my log-cat. Can anyone help me to sort it out?</p>
  
  <pre><code>08-22 12:00:43.871: E/AndroidRuntime(2491): FATAL EXCEPTION: AsyncTask #1
  
  08-22 12:00:43.871: E/AndroidRuntime(2491): java.lang.RuntimeException: An error occured while executing doInBackground()
  
  08-22 12:00:43.871: E/AndroidRuntime(2491):     at android.os.AsyncTask$3.done(AsyncTask.java:278)
  
  08-22 12:00:43.871: E/AndroidRuntime(2491):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
  
  08-22 12:00:43.871: E/AndroidRuntime(2491):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
  
  08-22 12:00:43.871: E/AndroidRuntime(2491):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
  
  08-22 12:00:43.871: E/AndroidRuntime(2491):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
  
  08-22 12:00:43.871: E/AndroidRuntime(2491):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
  
  08-22 12:00:43.871: E/AndroidRuntime(2491):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
  08-22 12:00:43.871: E/AndroidRuntime(2491):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
  
  08-22 12:00:43.871: E/AndroidRuntime(2491):     at java.lang.Thread.run(Thread.java:856)
  
  08-22 12:00:43.871: E/AndroidRuntime(2491): Caused by: java.lang.NoClassDefFoundError: info.androidhive.camerafileupload.AndroidMultiPartEntity
  
  08-22 12:00:43.871: E/AndroidRuntime(2491):     at info.androidhive.camerafileupload.UploadActivity$UploadFileToServer.uploadFile(UploadActivity.java:156)
  
  08-22 12:00:43.871: E/AndroidRuntime(2491):     at info.androidhive.camerafileupload.UploadActivity$UploadFileToServer.doInBackground(UploadActivity.java:145)
  
  08-22 12:00:43.871: E/AndroidRuntime(2491):     at info.androidhive.camerafileupload.UploadActivity$UploadFileToServer.doInBackground(UploadActivity.java:1)
  
  08-22 12:00:43.871: E/AndroidRuntime(2491):     at android.os.AsyncTask$2.call(AsyncTask.java:264)
  
  08-22 12:00:43.871: E/AndroidRuntime(2491):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
  
  08-22 12:00:43.871: E/AndroidRuntime(2491):     ... 5 more
  </code></pre>
  
  <p>package info.androidhive.camerafileupload;</p>
  
  <pre><code>   import  info.androidhive.camerafileupload.AndroidMultiPartEntity.ProgressListener;
  
    import java.io.File;
    import java.io.IOException;
  
    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 android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.content.Intent;
    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.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;
  
       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.color.action_bar))));
  
      // 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&lt;Void, Integer, String&gt;    
       {
  
          @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("abc@gmail.com"));
  
              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();
  }
  }
  </code></pre>
  
  <p>this is AndroidMultiPart class</p>
  
  <pre><code>   package info.androidhive.camerafileupload;
  
     import java.io.FilterOutputStream;
     import java.io.IOException;
     import java.io.OutputStream; 
     import java.nio.charset.Charset;
  
     import org.apache.http.entity.mime.HttpMultipartMode;
     import org.apache.http.entity.mime.MultipartEntity;
  
     @SuppressWarnings("deprecation")
     public class AndroidMultiPartEntity extends MultipartEntity
  
     {
  
      private final ProgressListener listener;
  
      public AndroidMultiPartEntity(final ProgressListener listener) {
      super();
      this.listener = listener;
     }
  
      public AndroidMultiPartEntity(final HttpMultipartMode mode,
          final ProgressListener listener) {
      super(mode);
      this.listener = listener;
      }
  
      public AndroidMultiPartEntity(HttpMultipartMode mode, final String  boundary,
          final Charset charset, final ProgressListener listener) {
      super(mode, boundary, charset);
      this.listener = listener;
      }
  
      @Override
      public void writeTo(final OutputStream outstream) throws IOException {
      super.writeTo(new CountingOutputStream(outstream, this.listener));
      }
  
      public static interface ProgressListener {
      void transferred(long num);
     }
  
     public static class CountingOutputStream extends FilterOutputStream {
  
      private final ProgressListener listener;
      private long transferred;
  
      public CountingOutputStream(final OutputStream out,
              final ProgressListener listener) {
          super(out);
          this.listener = listener;
          this.transferred = 0;
      }
  
      public void write(byte[] b, int off, int len) throws IOException {
          out.write(b, off, len);
          this.transferred += len;
          this.listener.transferred(this.transferred);
      }
  
          public void write(int b) throws IOException {
          out.write(b);
          this.transferred++;
          this.listener.transferred(this.transferred);
      }
    }
    }
  </code></pre>